【问题标题】:ASP.NET page 'Page_Load' firing before Master Page's 'Page_Load' event?ASP.NET 页面“Page_Load”在母版页的“Page_Load”事件之前触发?
【发布时间】:2011-04-08 10:14:28
【问题描述】:

在我的母版页上,我在Page_Load 事件中有一个小方法,用于检查用户是否已登录,如果没有,则将其重定向到登录页面。

问题在于,对于我的某些页面,Page_Load 事件假定用户已登录,而这些事件似乎在母版页中的登录检查之前触发,这会导致错误。

有什么方法可以解决这个问题?我可以在页面中使用除 Page_Load 以外的任何事件,它们会在 母版页之后触发吗?

【问题讨论】:

  • 您没有使用表单身份验证吗?如果用户未通过身份验证或会话超时,您只需指定 LoginUrl 即可自动重定向到任何页面上的 Login.aspx。 msdn.microsoft.com/en-us/library/…

标签: c# asp.net


【解决方案1】:

你有一个丰富的Page Cycle 有很多事件可以使用。 也许您可以使用Page_Init 来检查用户是否在母版页中登录。 或者在其他页面使用Page_PreRender

【讨论】:

  • 太棒了 - 将检查更改为 Page_Init,它现在可以完美运行。谢谢!
【解决方案2】:

如果您需要在 MasterPage Page_Load 页面事件之前发生的事情,请使用 Page_PreRender

protected void Page_PreRender(object sender, EventArgs e)

在实际页面中。

【讨论】:

    【解决方案3】:

    您必须检查用户是否已登录这些功能,方法是: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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多