这是一个奇怪的。我的主页Page_load似乎在页面Page_load之后运行。基本上,我试图捕获用户是否已登录/会话仍处于活动状态,如果没有,则将其重定向到登录页面。但它失败了因为它击中了各个页面page_load。我真的不想把检查放在每一页上。
母版页:
public partial class Cafe : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["UserName"] != null)
{
// lblName.Text = (string)Session["FirstName"];
}
else
{
Response.Redirect("~/login.aspx");
}
}
}
}
当我输入一个断点时,页面上的那个(例如,默认为.aspx)首先被击中,然后是主页面上的那个
答案 0 :(得分:2)
这是正常的页面生命周期。页面不包含在母版页中 - 母版页包含在页面中。它在页面事件和页面上其他控件的事件之间进行处理。
您可以使用Global.asax Application_AuthenticateRequest 事件对用户进行身份验证。这将在任何页面处理之前调用。
答案 1 :(得分:2)
将Master页面视为一个奇特的Web控件。如果我是你,我的所有网页都会从一个基页继承并在那里定义你的重定向。
public partial class MyPage : BasePage
{
}
public class BasePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["UserName"] == null)
{
Response.Redirect("~/login.aspx");
}
}
}
修改强> 在我看到你为什么要重定向之前我发布了这个。为什么不通过修改web.config为登录重定向来使用内置的ASP.NET功能进行登录?
<system.web>
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH">
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
答案 2 :(得分:1)
在运行母版页之前,Page_Load事件始终在每个页面中运行。 This is the most detailed listing我在页面事件订单上找到了。
会话数据在Init事件中可用。如果您希望在所有页面Page_Load事件之前执行逻辑,则可以将逻辑移动到母版页Init事件。