从Master Page继承

时间:2014-02-15 10:33:51

标签: c# asp.net

在Web窗体项目中,我使用MasterPage进行用户角色,其他页面继承自MasterPage。 我尝试将此代码用于MasterPage中的Load函数:

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,此加载功能再次运行,再次运行。

1 个答案:

答案 0 :(得分:0)

它将一次又一次地运行;这就是无国籍编程的本质。但你可以做的是使用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);
    }
}

会话保留值并阻止对数据库的持续检查,但是当它到期时,页面会重新加载它并将其再次存储在会话中。