Asp.net自定义基页具有用于重复器的公共属性,防止设计人员为该重复器添加受保护的变量
本文关键字:设计人 受保护 变量 添加 基页 自定义 net Asp 用于 属性 | 更新日期: 2023-09-27 18:11:58
我有一个自定义的基页类:
//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继承的属性?
这有点冗长,但我认为最简单的解决方法是使属性抽象,并将生成的字段作为支持字段实现它:
//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,我认为它在这里没有任何用处。