ASP.NET页面的“Page_Load”事件在母版页的“Page_Load”事件之前触发吗?

24
在我的主页面上,我有一个小方法在“Page_Load”事件中检查用户是否登录,如果没有登录,则将他们重定向到登录页面。但问题是,对于我的某些页面,“Page_Load”事件假定用户已登录,并且这些事件似乎在主页面中的登录检查之前触发,导致错误。
有什么方法可以解决这个问题吗?除了在页面中使用“Page_Load”之外,还有其他事件可以在主页面之后触发吗?

你没有使用表单身份验证吗?只需指定一个 LoginUrl,即可在任何页面上自动重定向到您的 Login.aspx,如果用户未经过身份验证或会话已超时。http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.loginurl.aspx - Tim Schmelter
3个回答

27

您有一个丰富的页面生命周期,可以使用许多事件。 也许您可以使用Page_Init在主页中检查用户是否已登录。 或者在其他页面中使用Page_PreRender


太棒了 - 将检查改为Page_Init,现在完美运行。谢谢! - Chris

2
如果您需要在页面事件之前在MasterPage Page_Load中进行某些操作,请使用Page_PreRender。
protected void Page_PreRender(object sender, EventArgs e)

在实际页面中。

1
你需要检查用户是否已登录,以便使用那些功能,方法是: if (this.Page.User.Identity.IsAuthenticated == true) { .. }。任何情况都不能被假设,这就是你所经历的。你也可以将登录检查移到 Page_Init 中,甚至将其移到运行在每个页面加载时的 HTTP 模块中;在那里,你可以访问各种事件,包括应用程序身份验证/授权。
如果你正在使用表单身份验证,你可以使用配置文件来驱动它,通过授权元素。
<system.web>
  <authorization>
    <deny users="?" />
    <allow users="*" />
  </authorization>
</system.web>
<location path="login.aspx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

HTH.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接