从母版页继承



在 Web 窗体项目中,我使用母版页作为用户角色,而其他页面继承自母版页。我尝试将此代码用于母版页中的加载函数:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string MyPage = System.IO.Path.GetFileName(Request.Path);
        SqlDataReader RolePageDr = BLL.Users.RolesPage(MyPage);
        while (RolePageDr.Read())
        {
            string Rolepage = RolePageDr["Roles"].ToString();
            if (Page.User.IsInRole(Rolepage) != true)
            {
                Response.Redirect("~/MsgPage.aspx");
            }
            else
                Response.Redirect(MyPage);
        }
    }
}

但问题是,当用户重定向到其他页面(例如:AdminPage)时,此管理页面继承自MasterPage,此加载函数再次运行。

它会一次又一次地运行;这就是无状态编程的本质。 但是您可以做的是使用 session 来存储它,然后仅在会话不存在时才重新加载它,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string role;
        var sessionValue = Session["Roles"];
        if (sessionValue != null)
           role = sessionValue.ToString();
        else
        {
          string MyPage = System.IO.Path.GetFileName(Request.Path);
          SqlDataReader RolePageDr = BLL.Users.RolesPage(MyPage);
          while (RolePageDr.Read())
          {
            role = RolePageDr["Roles"].ToString();
            Session["Roles"] = role;
          }
        }
        if (Page.User.IsInRole(Rolepage) != true)
        {
                Response.Redirect("~/MsgPage.aspx");
        }
        else
                Response.Redirect(MyPage);
    }
}

Session 保留该值并防止对数据库进行持续检查,但当它过期时,页面会重新加载它并将其再次存储在会话中。

最新更新