在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,此加载功能再次运行,再次运行。
答案 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);
}
}
会话保留值并阻止对数据库的持续检查,但是当它到期时,页面会重新加载它并将其再次存储在会话中。