我想在Global.asax中设置母版页属性。
这就是我所做的,但我在第一行得到NullReferenceException
。任何想法如何做到这一点?
protected void Application_PreSendRequestContent(Object sender, EventArgs e)
{
System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page;
if (Session["lang"] == "eng")
{
page.MasterPageFile = "SideMasterPageEng.master";
}
}
答案 0 :(得分:3)
Application_PreSendRequestContent在页面生命周期中为时已晚,无法执行此操作。 MasterPage已经在此阶段执行。
Global.asax实际上是应用程序事件的一个地方,而不是特定于页面的地方。请注意,许多应用程序事件(如Application_BeginRequest)都会在任何请求上调用,而不仅仅是aspx页面请求。许多这些事件都会被请求的每个js脚本,图像,css文件等触发。
以下是Global.asax中的一个很好的事件列表:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5771721.html
我知道你唯一可以明确更改母版页的地方是页面Page_PreInitevent处理程序
protected void Page_PreInit(object sender, EventArgs e)
{
this.Page.MasterPageFile = "~/Custom.master";
}
编辑: 阅读你的评论,听起来你需要从一个基页中派生你的页面,这个页面可以在一个地方进行更改。
using System;
namespace TestWebApplication
{
public class PageBase : System.Web.UI.Page
{
protected void Page_PreInit(object sender, EventArgs e)
{
Page.MasterPageFile = "~/Custom.master";
}
}
}
然后改变所有页面以继承它而不是System.Web.UI.Page ...
//public partial class WebForm1 : System.Web.UI.Page
public partial class WebForm1 : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}