2011-04-08 59 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。

相關問題