在页面生命周期中我们可以分配母版​​页吗?

时间:2013-04-15 14:15:12

标签: c# asp.net master-pages page-lifecycle

我的同事最近向我询问了这个问题。我知道在LoadViewSate方法中的InitComplete和Preload事件之间可以使用ViewState。同样,我想知道在哪个页面生命周期事件中我们可以为特定页面分配母版页?

2 个答案:

答案 0 :(得分:7)

  

因为主页和内容页面在合并期间合并   页面处理的初始化阶段,必须是母版页   在此之前分配。通常,您可以动态分配母版页   在PreInit阶段

Page PreInit事件

void Page_PreInit(Object sender, EventArgs e)
{
    this.MasterPageFile = "~/MyMaster.master";
}

阅读Working with ASP.NET Master Pages Programmatically

答案 1 :(得分:3)

参考:ASP.NET Page Life Cycle Overview

页面活动 典型用途 的 PreInit 在启动阶段完成之后和初始化阶段开始之前引发。 将此事件用于以下事项: 检查IsPostBack属性以确定这是否是第一次处理页面。此时也设置了IsCallback和IsCrossPagePostBack属性。

  • 创建或重新创建动态控件。
  • 动态设置母版页。
  • 动态设置Theme属性。
  • 读取或设置个人资料属性 值。

注意如果请求是回发,则控件的值尚未从视图状态恢复。如果在此阶段设置控件属性,则可能会在下一个事件中覆盖其值。

来自:Attaching Master Pages Dynamically

除了以声明方式指定母版页(在 @ Page directive or in the configuration file 中)之外,您还可以将母版页动态附加到内容页面。由于在页面处理的初始化阶段合并主页面和内容页面,因此必须先分配主页面。通常,您在PreInit阶段动态分配母版页,如下例所示:

void Page_PreInit(Object sender, EventArgs e)
{
    this.MasterPageFile = "~/DefaultMaster.master";
}

修改:

来源: ASP.NET Master Pages - How Master Pages Work
您也可以使用@Page指令指定母版页。

<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>