主页面Page_Load方法在aspx页面之后运行Page_Load方法

时间:2014-08-11 15:00:55

标签: c# asp.net master-pages

这是一个奇怪的。我的主页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)首先被击中,然后是主页面上的那个

3 个答案:

答案 0 :(得分:2)

这是正常的页面生命周期。页面不包含在母版页中 - 母版页包含在页面中。它在页面事件和页面上其他控件的事件之间进行处理。

来自MSDN site

  1. 内容页面PreInit事件。
  2. 母版页控制初始事件。
  3. 内容控制Init事件。
  4. 母版页初始化事件。
  5. 内容页面初始化事件。
  6. 内容页面加载活动。
  7. 母版加载事件。
  8. 主页面控制加载事件。
  9. 内容页面控制加载事件。
  10. 内容页面PreRender活动。
  11. 主页PreRender活动。
  12. 母版页控制PreRender事件。
  13. 内容页面控制PreRender事件。
  14. 主页控制卸载事件。
  15. 内容页面控制卸载事件。
  16. 母版页卸载事件。
  17. 内容页面卸载事件。
  18. 您可以使用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事件。