主页面和内容页面中的 page_load 事件
以下是母版页与内容页合并时事件发生的顺序:
http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
所以,我的问题是:
我有一个登录页面(不使用母版页)、一个母版页和数百个内容 页。
我在母版页中检查登录会话 Session["loggedInUser"]
(如果未登录,则重定向到登录页面)
因此,当我未登录时,如果我键入一个内容页面的地址,它必须检查主页中的登录会话并重定向到登录页面,对吧?但这里有两种情况:
如果在内容页面中,我没有使用与 Session["loggedInUser"] 相关的任何内容,它将重定向到登录页面,所以,这里没问题!
第二种情况:如果我使用 Session["loggedInUser"] 在内容页面中显示用户名,例如:
UserInfo loggedInUser = (UserInfo)Session["loggedInUser"];
它将返回 null 对象,因为 page_load
内容页面在母版页中的 page_load
之前触发,因此它会抛出 null 对象,而不是重定向到登录页面。
我还在母版页中尝试了 Page_PreInit
但没有帮助
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["loggedInUser"] == null)
{
Response.Redirect("~/Login.aspx");
}
}
有什么建议吗?
Here is the sequence in which events occur when a master page is merged with a content page:
http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
So, my problem is:
I have one login page (not use master page), one master page, and hundreds of content page.
I check login session Session["loggedInUser"]
in master page (if not logged in, redirect to login page)
So, when I don't log in, if I type the address of one content page, it must check login session in master page and redirect to login page, right? But it has two cases here:
If in content page, I don't use anything related to Session["loggedInUser"]
, it will redirect to login page, so, it's OK here!
The second case: if I use Session["loggedInUser"]
to display Username in content page for example:
UserInfo loggedInUser = (UserInfo)Session["loggedInUser"];
it will return null object here, because the page_load
in content page is fired before page_load
in master page, so it thows null object instead of redirecting to login page.
I also tried Page_PreInit
in master page but no help
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["loggedInUser"] == null)
{
Response.Redirect("~/Login.aspx");
}
}
Any suggestion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
据推测,当您说您正在使用
Session["loggedInUser"]
值时,您正在调用.ToString()
方法或类似方法来显示它?在这种情况下,您需要在使用它之前检查是否有空对象。在任何情况下,最好的做法是在对对象使用任何方法之前检查该对象是否存在,因此:
仅当您确定该代码永远不会在没有实例化 Session 对象的情况下执行,您可以在不检查空引用的情况下使用方法吗?
http://msdn.microsoft.com/en-us/library/03sekbw5.aspx
Presumably, when you say you are using the
Session["loggedInUser"]
value, you are then calling.ToString()
method or similar to display it?In which case, you will need to check for a null object before using it. It would be best practice to check for the existance of the object before using any methods on it in any case, so:
Only if you are certain that the code will never be executed without the Session object being instantiated can you use methods without checking for a null reference.
http://msdn.microsoft.com/en-us/library/03sekbw5.aspx
最后我想出了一个解决方案:
我创建了一个类
BasePage
,如下所示:在内容页面中,我不是从
Page
继承,而是更改为BasePage
效果非常好,感谢您的支持,
美好的一天;)
Finally I've come up with a solution:
I create a class
BasePage
like this:And in the content page, instead of inheriting from
Page
, I change toBasePage
and it works perfectlyThanks for all of your support
Nice day ;)
您可以在内容页面的
Page_PreRender()
而不是Page_Load()
中检查Session["loggedInUser"]
,或者也可以在母版页中检查检查Page_Init()
而不是Page_Load()
。我们遇到了同样的问题,并使用了母版页Page_Init()
选项,以便我们仍然可以在所有内容页面中使用Page_Load()
。编辑:它是
Page_Init()
不是PreInit()
。You could check for
Session["loggedInUser"]
in the content Page'sPage_PreRender()
rather thanPage_Load()
or alternatively, do the master page check in thePage_Init()
rather thanPage_Load()
. We had the same problem and went with the Master pagePage_Init()
option, so that we could still usePage_Load()
in all the Content pages.Edit: It's
Page_Init()
notPreInit()
.我有2个母版页(1个用于登录前,第2个用于登录后),主页是独立的,注销页面继承登录后页面)在所有postloginpage会话中检查if sessionnull(xyz)else(重定向登录页面)所有这些都在afterlogin.master的Page_Init事件中。 ........................成功
I have 2 masterpages(1 for prelogin,2nd for afterlogin),home page is independent,logout page inherits postlogin page) in all postloginpage session chck if sessionnull(xyz)else(redirect loginpage) all this in Page_Init event of afterlogin.master................Successfull