Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# 为什么可以’;是否在Page.PreInit事件后动态应用主题和母版页?_C#_Asp.net_Webforms_Master Pages_Themes - Fatal编程技术网

C# 为什么可以’;是否在Page.PreInit事件后动态应用主题和母版页?

C# 为什么可以’;是否在Page.PreInit事件后动态应用主题和母版页?,c#,asp.net,webforms,master-pages,themes,C#,Asp.net,Webforms,Master Pages,Themes,1) 由于以下原因,我假设只能在Page.PreInit事件处理程序中以编程方式设置主题: 如果我们在Page.Init事件处理程序中设置了一个主题,那么此时ViewState已经被跟踪,因此主题应用的任何数据都将被跟踪并标记为脏数据(这将消耗大量带宽) 若我们在Init事件之后设置它,那个么主题也可以覆盖应用于单个控件的反序列化ViewState数据 在Page.PreInit之后不能设置主题还有其他原因吗 2) 另外,为什么不能在Page.PreInit之后应用母版页 thanx根据


1) 由于以下原因,我假设只能在Page.PreInit事件处理程序中以编程方式设置主题:

  • 如果我们在Page.Init事件处理程序中设置了一个主题,那么此时ViewState已经被跟踪,因此主题应用的任何数据都将被跟踪并标记为脏数据(这将消耗大量带宽)

  • 若我们在Init事件之后设置它,那个么主题也可以覆盖应用于单个控件的反序列化ViewState数据


在Page.PreInit之后不能设置主题还有其他原因吗


2) 另外,为什么不能在Page.PreInit之后应用母版页

thanx根据这一点:

“MasterPageFile”属性只能 在“Page_PreInit”中或之前设置 事件

这个例外是有道理的,因为我们 知道母版页必须重新排列 之前页的控件层次结构 Init事件触发

本文还包括以下示例:

using System;
using System.Web.UI;

public class BasePage : Page
{
   public BasePage()
   {
        this.PreInit += new EventHandler(BasePage_PreInit);
   }

    void BasePage_PreInit(object sender, EventArgs e)
    {
        MasterPageFile = "~/Master1.master";
    }
}
或者,我以前使用过的一种方法:

protected override void OnPreInit(EventArgs e) 
    { 
        base.OnPreInit(e); 
        if (Request.QueryString["Master"] == "Simple") 
            MasterPageFile = "~/Masterpages/Simple.Master"; 
    } 
还有什么其他原因可以解释这个主题吗 无法在Page.PreInit之后设置

对。主题包括皮肤,皮肤可以指定控件的属性。这些属性需要在Init事件期间设置,因此在此之前需要选择所需的主题

ViewState跟踪可能是一个问题,但我认为与上述问题相比,这是一个次要问题

请注意,StyleSheetTheme(优于常规主题,IMO)实际上是从页面上的重写属性设置的,而不是通过设置属性本身的值(除非从HttpModule设置)

为什么不能应用母版页 在Page.PreInit之后


控件根据其在控件树中的位置(包括访问表单控件等)确定其ID和各种其他特性和属性。母版页相当于一组父控件,因此控件可以完全初始化自己,直到父结构就位。初始化发生在初始化事件期间,因此在此之前需要选择母版页。

我关于在初始化前不能设置主题的假设是否正确?我不确定主题,但对于母版页,控件层次结构将是决定性的。RickNZ-“StyleSheetTheme实际上是从页面上的重写属性设置的。”我认为这是因为我们最早可以通过编程方式设置StyleSheetThemes的是Page.PreInit内部,这已经太晚了,因为StyleSheetThemes内部定义的皮肤需要在PreInit事件之前应用于控件?!