如果用户的会话已过期,我想将用户重定向到自定义页面。
On PageLoad
If Session("OrgID") = Nothing Then
Response.Redirect("SchoolLogin.aspx?schoolID="+[schoolid])
End If
我可以将schoolID存储在每个页面的隐藏字段中,但这看起来并不优雅。我想在每个页面上尝试使用用户控件中的隐藏字段,但是用户控件PageLoad在主PageLoad之后触发,因此在检查会话到期之前我会收到错误。对此有一个共同的解决方案吗?
答案 0 :(得分:0)
您可以使用QueryString,ViewState(ASP.NET内置隐藏字段)或将其设置为cookie值。
我对你的情景不太了解。我能提供的最好的例子就是我如何处理(我猜的是)与你的情况类似。
为要继承的所有页面类创建一个基类(更多这里是oldy但是好的http://www.4guysfromrolla.com/articles/041305-1.aspx),将您的SchoolId属性添加到它。这是在c#我的appologise,不幸的是VB.NET语法字面上让我的牙齿纠结。翻译它应该不难,因为这是非常基本的东西。
使用QuertString,您需要测试-1并在这种情况下重定向。
public class BasePage : System.Web.UI.Page
{
public int SchoolId
{
get
{
if (Request.QueryString["schoolId"] != null)
{
return Convert.ToInt32(Request.QueryString["schoolId"]);
}
else
{
return -1;
}
}
}
}
使用ViewState
public class BasePage : System.Web.UI.Page
{
public int SchoolId
{
get
{
if (ViewState["schoolId"] != null)
{
return (int)ViewState["schoolId"];
}
else
{
int schoolId = someDataLayer.SelectUsersSchoolId(User.Identity.Name);
ViewState["schoolId"] = schoolId;
return schoolId;
}
}
}
}
使用cookies(更多信息)http://msdn.microsoft.com/en-us/library/aa289495(v=vs.71).aspx
public class BasePage : System.Web.UI.Page
{
public int SchoolId
{
get
{
if (Request.Cookies["schoolId"] != null)
{
return (int)Request.Cookies["schoolId"].Value;
}
else
{
int schoolId = someDataLayer.SelectUsersSchoolId(User.Identity.Name);
Request.Cookies["schoolId"].Value = schoolId;
Request.Cookies["schoolId"].Expires = DateTime.Now.AddDays(1);
return schoolId;
}
}
}
}