繁体   English   中英

母版页和内容页中的page_load事件

[英]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对象的情况下永远不会执行代码时,才可以使用不检查空引用的方法。

http://msdn.microsoft.com/en-us/library/03sekbw5.aspx

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

我这样创建一个类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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM