gpt4 book ai didi

asp.net - 在 ASP.NET 中从 Global.asax 设置母版页

转载 作者:行者123 更新时间:2023-12-04 06:52:46 28 4
gpt4 key购买 nike

我想在 Global.asax 中设置 Masterpage 属性。

这就是我所做的,但我得到了 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";
}
}

最佳答案

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)
{

}
}

关于asp.net - 在 ASP.NET 中从 Global.asax 设置母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881861/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com