2011-04-08 91 views
22

在我的母版页上,我在Page_Load事件中有一个小方法,用于检查用户是否已登录,如果没有,则将它们重定向到登录页面。在主页的'Page_Load'事件之前,ASP.NET页面'Page_Load'正在触发?

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

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

+0

你没有使用Forms-Authentication?如果用户未通过身份验证或会话超时,则只需指定LoginUrl即可自动重定向到任何页面上的Login.aspx。 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.loginurl.aspx – 2011-04-08 10:42:32

回答

25

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

+0

非常棒 - 将支票更改为Page_Init,现在它完美无缺。谢谢! – Chris 2011-04-08 11:58:47

2

如果您需要的页面事件之前的母版页的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。

相关问题