C# asp.net自定义basepage具有中继器的公共属性,是否阻止设计器为该中继器添加受保护的变量?

C# asp.net自定义basepage具有中继器的公共属性,是否阻止设计器为该中继器添加受保护的变量?,c#,asp.net,visual-studio-2010,C#,Asp.net,Visual Studio 2010,我有一个自定义的基页类: //MobileFunnelPage.cs public abstract class MobileFunnelPage : Page { public virtual Repeater myRepeater{get;set;} } 然后我有一个继承该页面的页面: //ConcreteMobileFunnelPage.aspx.cs public class ConcreteMobileFunnelPage: MobileFunnelPag

我有一个自定义的基页类:

//MobileFunnelPage.cs  
public abstract class MobileFunnelPage : Page  
{  
    public virtual Repeater myRepeater{get;set;}  
}
然后我有一个继承该页面的页面:

//ConcreteMobileFunnelPage.aspx.cs  
public class ConcreteMobileFunnelPage: MobileFunnelPage  
{  
    protected override void Page_Load(object sender, EventArgs e){  
        myRepeater.DataSource = new string[]{"Error 1","Error 2","Error 3"};  
        myRepeater.DataBind();  
    }  
} 
使用以下标记:

//ConcreteMobileFunnelPage.aspx
<%@ Page Title="ConcreteMobilePage!" Language="C#" AutoEventWireup="true" CodeBehind="ConcreteMobileFunnelPage.aspx.cs" inherits="MyNamespace.ConcreteMobileFunnelPage" %>  
...  
<asp:Repeater ID="myRepeater" runat="server" Visible="false">  
<HeaderTemplate>  
    <div>  
        <span>  
</HeaderTemplate>  
<ItemTemplate><li><%# Container.DataItem %></li></ItemTemplate>  
<FooterTemplate>  
</span>  
    </div>  
</FooterTemplate>  
</asp:Repeater> 

这会导致问题,因为它不是覆盖继承的myRepeater属性,而是隐藏它。有没有办法让设计师尊重myRepeater继承的属性?

这有点冗长,但我认为最简单的解决方法是将属性抽象化,并使用生成的字段作为支持字段来实现它:

//MobileFunnelPage.cs  
public abstract class MobileFunnelPage : Page  
{  
    public abstract Repeater MyRepeater { get; set; }  
}

//ConcreteMobileFunnelPage.aspx.cs  
public class ConcreteMobileFunnelPage : MobileFunnelPage  
{  
    public override Repeater MyRepeater {
        get {
           return myRepeater;
        }
        set {
           myRepeater = value;
        }
    }
}
(此处myRepeater是受保护的自动生成字段,我已将公共属性重命名为myRepeater)


顺便说一句,您可能应该移除二传手,我认为它在这里没有任何用途。

这正是我最终要做的。。。(卸下设定器和所有部件。)
//MobileFunnelPage.cs  
public abstract class MobileFunnelPage : Page  
{  
    public abstract Repeater MyRepeater { get; set; }  
}

//ConcreteMobileFunnelPage.aspx.cs  
public class ConcreteMobileFunnelPage : MobileFunnelPage  
{  
    public override Repeater MyRepeater {
        get {
           return myRepeater;
        }
        set {
           myRepeater = value;
        }
    }
}