Пользовательская базовая страница asp.net имеет открытое свойство для повторителя, не позволяет разработчику добавить защищенную переменную для этого повторителя? - PullRequest
1 голос
/ 19 октября 2011

У меня есть пользовательский базовый класс страницы:

//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 постоянно регенерирует и добавляет защищенные переменные для myRepeater в файл designer.cs:

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

Это вызывает проблему, поскольку оно не переопределяет унаследованное свойство myRepeater, оно скрываетсяЭто.Есть ли способ заставить дизайнера соблюдать это наследие myRepeater?

1 Ответ

0 голосов
/ 19 октября 2011

Это немного более многословно, но я думаю, что самый простой обходной путь - сделать свойство абстрактным и реализовать его с созданным полем в качестве вспомогательного поля:

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

В качестве отступления, вы, вероятно, должны удалить сеттер, я не думаю, что он здесь служит какой-либо цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...