主页面和内容页面中的 page_load 事件

发布于 2024-11-06 01:36:45 字数 979 浏览 1 评论 0原文

以下是母版页与内容页合并时事件发生的顺序:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自由如风 2024-11-13 01:36:45

据推测,当您说您正在使用 Session["loggedInUser"] 值时,您正在调用 .ToString() 方法或类似方法来显示它?

在这种情况下,您需要在使用它之前检查是否有空对象。在任何情况下,最好的做法是在对对象使用任何方法之前检查该对象是否存在,因此:

if (Session["loggedInUser"] != null)
{ ... }

仅当您确定该代码永远不会在没有实例化 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:

if (Session["loggedInUser"] != null)
{ ... }

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

蓝眼泪 2024-11-13 01:36:45

最后我想出了一个解决方案:

我创建了一个类 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);
    }
}

在内容页面中,我不是从 Page 继承,而是更改为 BasePage 效果非常好,

感谢您的支持,

美好的一天;)

Finally I've come up with a solution:

I create a class BasePage like this:

public class BasePage : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        if (Session["loggedInUser"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }
        base.OnLoad(e);
    }
}

And in the content page, instead of inheriting from Page, I change to BasePage and it works perfectly

Thanks for all of your support

Nice day ;)

清眉祭 2024-11-13 01:36:45

您可以在内容页面的 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's Page_PreRender() rather than Page_Load()or alternatively, do the master page check in the Page_Init() rather than Page_Load(). We had the same problem and went with the Master page Page_Init() option, so that we could still use Page_Load() in all the Content pages.

Edit: It's Page_Init() not PreInit().

江湖正好 2024-11-13 01:36:45

我有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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文