Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C ASP.NET母版页嵌套继承是邪恶的_C#_Asp.net_Inheritance_Webforms_Master Pages - Fatal编程技术网

C# C ASP.NET母版页嵌套继承是邪恶的

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,

我有一个解决方案,其中有很多不同的母版页/基本页,它们都是从其他地方继承的。我的问题是我在BaseMaster中有一个虚拟字符串,它被BaseManagement覆盖,但是当我尝试访问这个字符串时,我总是得到基值

继承母版和页面的目的显然是避免到处都有重复的代码

也许这与我需要受保护的无效页面\加载对象发送者、事件参数在每个主控位置都有关系

下面是Base.Master.cs中的一个片段

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,会发生什么情况?我不同意,很抱歉,我周末没有看到此内容,因为我在项目中使用了继承的母版页。我还使用继承的页面类。你可以继承一个基类而不是你知道的一个基页。我不同意你的观点,很抱歉我周末没有看到这个,因为我在我的项目中使用了继承的母版页。我还使用继承的页面类。您可以继承基类,而不是您知道的基页。