1

如果他们的会话已过期,我想将用户重定向到自定义页面。

On PageLoad
If Session("OrgID") = Nothing Then
    Response.Redirect("SchoolLogin.aspx?schoolID="+[schoolid])
End If

我可以将 schoolID 存储在每个页面的隐藏字段中,但这似乎不太优雅。我想尝试在每个页面上都有的用户控件中使用隐藏字段,但是用户控件 PageLoad 在主 PageLoad 之后触发,所以在检查会话到期之前我会收到一个错误。有一个通用的解决方案吗?

4

1 回答 1

0

您可以使用 QueryString、ViewState(ASP.NET 的内置隐藏字段)或将其设置为 cookie 值。

我对你的场景了解不够。我能提供的最好的例子是我如何处理(我猜的)与你的情况相似的例子。

为您的所有页面类创建一个基类以继承(更多在这里oldy but goody http://www.4guysfromrolla.com/articles/041305-1.aspx),将您的 SchoolId 属性添加到它。这是在 c# 中,我很抱歉,不幸的是 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;
            }
        }
    }
}

使用 cookie(更多信息)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;
            }
        }
    }
}
于 2012-09-03T21:06:21.300 回答