2011-10-19 28 views
1

我有一個自定義的基本頁類:asp.net自定義basepage具有中繼器的公共屬性,阻止設計器爲該中繼器添加受保護的變量?

//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> 

的asp.net設計者不斷地爲designer.cs文件中的myRepeater重新生成和添加受保護的變量:

//ConcreteMobilFunnelPage.aspx.designer.cs 
protected global::System.Web.UI.WebControls.Repeater myRepeater; 

這會導致一個問題,因爲它不覆蓋繼承的myRepeater屬性,而是隱藏它。有沒有辦法讓設計師兌現myRepeater繼承的財產?

回答

0

它更羅嗦了一點,但我認爲最簡單的解決方法是使財產抽象,並與所產生的場爲依託領域實現它:

//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)

另外,您應該刪除setter,我認爲它在這裏沒有任何用處。

+0

這就是我最終做的事情......(刪除二傳手和所有。) – Jon