- 获得
Site.Master
(主页( - 获取
Default.aspx
(第页( - 在
Default.aspx
中,放置了一个UserControlLoginUserControl.ascx
现在我的问题是:
在LoginUserControl中,我检查Login是否正确。如果是,则我将Default.aspx
上的属性IsLoggedIn
设置为true:
//Inside LoginUserControl.ascx
if (/*Login is Ok*/)
{
((Default)Page).IsLoggedIn = true;
}
所以,现在我需要主页Site.Master
中的这些信息我必须知道用户是否已登录。。我这样做:
//Inside Site.Master
protected void Page_Load(object sender, EventArgs e)
{
if (((Default)Page).IsLoggedIn)
{
//Do Something
}
}
但是它总是错误的!为什么?我想我设置了IsLoggedIn=true?!为什么它是假的?这是一个生命周期问题吗?我必须做的是,它能起作用:(
您应该将属性IsLogged on添加到页面的视图状态中。
public bool IsLoggedOn {
get { return ViewState["IsLoggedOn"]==null?false:Convert.ToBoolean(ViewState["IsLoggedOn"]); }
set { ViewState["IsLoggedOn"] = value; }
}
或者,如果该属性在多个页面上使用,则应将其添加到会话(用会话替换ViewState(
这很可能是页面生命周期问题。站点中的Page_Load.Master在您的用户控件中先于Page_Load运行。您需要做的是找到适当的页面和控件事件,以便在其中应用代码
此页面对页面/控件/用户控件事件生命周期进行了完整的细分,应该会有所帮助(向下滚动到合并的事件(
我认为您的最佳选择是在用户控制Page_it事件期间设置IsLoggedIn属性,或者在母版页的Page_Prender事件期间检索并对其执行操作。