[英]page_load event in Master and Content Pages
以下是母版页与内容页合并时事件发生的顺序:
http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
所以,我的问题是:
我有一个登录页面(不使用母版页),一个母版页和数百个内容页。
我在母版页中检查登录会话Session["loggedInUser"]
(如果未登录,请重定向到登录页面)
因此,当我不登录时,如果键入一个内容页面的地址,它必须在母版页面中检查登录会话并重定向到登录页面,对吗? 但是这里有两种情况:
如果在内容页面中,我不使用任何与Session["loggedInUser"]
,它将重定向到登录页面,因此在这里可以!
第二种情况:例如,如果我使用Session["loggedInUser"]
在内容页面中显示用户名,例如:
UserInfo loggedInUser = (UserInfo)Session["loggedInUser"];
它会回到这里空的对象, 因为page_load
的内容页面之前解雇page_load
在母版页 ,所以它thows空对象,而不是重定向到登录页面。
我也在母版页中尝试过Page_PreInit
,但没有帮助
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["loggedInUser"] == null)
{
Response.Redirect("~/Login.aspx");
}
}
有什么建议吗?
您可以在内容页面的Page_PreRender()
而不是Page_Load()
检查Session["loggedInUser"]
,或者在母版页中检查Page_Init()
而不是Page_Load()
。 我们遇到了同样的问题,并使用了母版页的Page_Init()
选项,因此我们仍然可以在所有“内容”页面中使用Page_Load()
。
编辑:这是Page_Init()
而不是 PreInit()
。
大概,当您说正在使用Session["loggedInUser"]
值时,您是在调用.ToString()
方法还是类似的方法来显示它?
在这种情况下,您将需要在使用前检查空对象。 在任何情况下,使用对象上的任何方法之前,最好先检查对象是否存在,因此:
if (Session["loggedInUser"] != null)
{ ... }
仅当确定在没有实例化Session对象的情况下永远不会执行代码时,才可以使用不检查空引用的方法。
最后,我想出了一个解决方案:
我这样创建一个类BasePage
:
public class BasePage : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
if (Session["loggedInUser"] == null)
{
Response.Redirect("~/Login.aspx");
}
base.OnLoad(e);
}
}
在内容页面中,我改用BasePage
,而不是从Page
继承,它可以正常工作
感谢您的支持
美好的一天;)
如果在afterlogin.master的Page_Init事件中使用sessionnull(xyz)else(redirect loginpage),则在所有postloginpage会话chck中都有2个母版页(用于prelogin的页面为1,用于登录后的页面为第二,首页是独立的,退出页面继承postlogin页面)。 ...............全成
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.