C# C ASP.NET母版页嵌套继承是邪恶的
我有一个解决方案,其中有很多不同的母版页/基本页,它们都是从其他地方继承的。我的问题是我在BaseMaster中有一个虚拟字符串,它被BaseManagement覆盖,但是当我尝试访问这个字符串时,我总是得到基值 继承母版和页面的目的显然是避免到处都有重复的代码 也许这与我需要受保护的无效页面\加载对象发送者、事件参数在每个主控位置都有关系 下面是Base.Master.cs中的一个片段C# C ASP.NET母版页嵌套继承是邪恶的,c#,asp.net,inheritance,webforms,master-pages,C#,Asp.net,Inheritance,Webforms,Master Pages,我有一个解决方案,其中有很多不同的母版页/基本页,它们都是从其他地方继承的。我的问题是我在BaseMaster中有一个虚拟字符串,它被BaseManagement覆盖,但是当我尝试访问这个字符串时,我总是得到基值 继承母版和页面的目的显然是避免到处都有重复的代码 也许这与我需要受保护的无效页面\加载对象发送者、事件参数在每个主控位置都有关系 下面是Base.Master.cs中的一个片段 public abstract partial class BaseMaster : MasterPage,
public abstract partial class BaseMaster : MasterPage, IRewritablePageElement
{
public BasePage BasePage { get { return Page as BasePage; } }
public BaseMaster Self { get { return (BaseMaster)this.Page.Master; } }
public virtual string accessUri { get { return "/"; } }
public string AccessUri { get { return Self.accessUri; } }
protected void Page_Load(object sender, EventArgs e)
{
this.OnPageLoad(sender, e);
}
/// <summary>
/// If we want to do something on page load, we override the following method
/// </summary>
public virtual void OnPageLoad(object sender, EventArgs e)
{
SetCacheability();
RedirectSiteDown();
RedirectUnregisteredUsers();
RedirectUnprivilegedUsers();
if(!IsPostBack)
{
PopulateMenu();
...
它是丑陋的,因为它应该是
public virtual string AccessUri { get { return "/"; } }
但是,代码以某种方式成功地将AccessUri降到了一个级别,在这个级别上,AccessUri是/尽管它已在更高级别的某个地方被/a/覆盖:
public partial class BaseManagementMaster : BaseMaster
{
public override string accessUri { get { return "/a/"; } }
protected void Page_Load(object sender, EventArgs e)
{
}
}
如果不是为了自己,这里的AccessUri仍然是/。这完全没有道理。
此外,我必须重新声明Page_Load方法这一事实也没有什么意义
是否有一种干净的方法来继承母版页,这在现实中可能吗?问题在于继承母版页,例如
BaseManagementMaster : BaseMaster
这是错误的,正确的方法应该是只声明母版页,然后在页面级而不是母版级进行抽象。问题在于继承母版页,如
BaseManagementMaster : BaseMaster
这是错误的,正确的做法应该是只声明母版页,然后在页面级而不是母版级进行抽象。我相信这可能是您在Self中所做的铸造。无论是哪种类型,你都要将它交给一个垒长。如果在页面加载中键入此.accessUri会发生什么?我相信这可能是您在Self中所做的角色转换。无论是哪种类型,你都要将它交给一个垒长。如果在页面加载中键入此.accessUri,会发生什么情况?我不同意,很抱歉,我周末没有看到此内容,因为我在项目中使用了继承的母版页。我还使用继承的页面类。你可以继承一个基类而不是你知道的一个基页。我不同意你的观点,很抱歉我周末没有看到这个,因为我在我的项目中使用了继承的母版页。我还使用继承的页面类。您可以继承基类,而不是您知道的基页。