c# - 动态更改母版页 .. 从母版页?

标签 c# asp.net master-pages

我有以下代码:

public abstract class BasePage : Page
{
    protected void Page_PreInit(object sender, EventArgs e)
    {
        if (IsPostBack)
            return;

        var section = ConfigurationManager.GetSection("UrlRewriter/PlainRules");

        if (section == null)
            SetMaster("~/App_Shared/Master/BaseRegular.Master");
        else
            SetMaster("~/App_Shared/Master/BaseRewritable.Master");
    }

    protected void SetMaster(string value)
    {
        MasterPage master = Master;

        while (master != null)
        {
            if (master is SharedMaster)
            {
                master.MasterPageFile = value;
                break;
            }

            master = master.Master;
        }
    }
}

动态更改母版页效果很好,但我希望能够直接从 SharedMaster 执行此操作,而不是从我拥有的每个页面执行此操作。

如果放在主页上,Page_PreInit 永远不会触发,那么我该如何实现呢?

最佳答案

如果您将此功能放在 BasePage 中,然后从 BasePage 继承您的每个页面,那么您不必在每个页面中重复代码。您似乎已经有了完美的工作代码。

就将逻辑放在母版页中而言,这是不可能的 - 因为一旦母版页与页面相关联并且控件树已加载,您就无法更改母版页。 pre_init 不会触发母版页,因为母版页直到那时才加载,因此一旦可以更改与页面关联的母版页。然后加载母版页并创建复合控件树,之后您将收到母版页事件。

关于c# - 动态更改母版页 .. 从母版页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420054/

相关文章:

javascript - 如何从母版javascript调用子页面的javascript函数

c# - 删除字符串中的额外间距 [Fastest Way]

asp.net - 如何在asp.net 2.0中使用状态服务器进行 session

asp.net - 即使设置了宽度,下拉列表框也会根据需要设置宽度

asp.net - 内容页能否使用其母版页的母版父级的 ContentPlaceHolderID(嵌套母版页)

asp.net - 为什么我的嵌套母版页丢失了 CSS 格式?

c# - 将 unity.wcf 与 asp.net 路由集成

c# - 下载大文件时 SendAsync 和 CopyToAsync 不起作用

c# - 混淆变量被覆盖

c# - 在运行时更改云服务 web.config