动态更改母版页..从母版页?

时间:2011-06-21 03:31:55

标签: 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如果放在母版页上就不会激活,那么我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

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

只要将逻辑放在母版页中,就不可能 - 因为一旦母版页与页面关联并加载了控制树,就无法更改母版页。 pre_init不会触发母版页,因为母版页在此之前未加载,因此一旦可以更改与页面关联的母版页。然后加载母版页并创建一个复合控制树,之后您将收到母版页事件。