2011-04-18 65 views
0

我正在開發一個項目,一旦用戶被引導到某個頁面,他們會收到一定程度的「身份驗證」,如果用戶試圖在他們之前從頁面導航離開,我想刪除此「身份驗證」完成了一個表格。從C#(.Net 3.5)中的頁面導航離開時調用方法的方法?

我想知道是否是一種方法來調用方法來重定向離開頁面事件生命週期的特定頁面(或不同的,如果你有建議)?我對C#和.Net框架是一種新的東西,所以如果這不是標準的,那麼告訴我什麼纔是正確的方法。

謝謝!

回答

0

你的頁面不會知道它正在被導航,因爲它實際上是無狀態的。一旦該頁面由C#生成,它將被傳輸到瀏覽器。該頁面不在C#中「存在」。一旦生成,就是這樣。

您可以使用會話變量來跟蹤用戶的「身份驗證」級別。如果他們擊中其他頁面,則可以檢查此變量的值並據此採取行動。如果他們填寫了表格,則在會議中記錄該事實。

另一種選擇是在用戶離開頁面時使用javascript回調服務器。這不會在Page事件生命週期內起作用,因爲它已經完成

此「驗證」是否存在很長時間?你需要堅持嗎?

+0

如果用戶完成表單,整個會話(或直到註銷)都存在「驗證」。我確實意識到無國籍,因此我認爲這不一定會奏效。我不確定是否有任何自定義事件可以解決這個問題(當我談論導航時,我嚴格意味着在站點內導航,而不是在外部域/站點上)。也許我應該重組這個過程? – kachingy123 2011-04-18 10:17:07

1

您可以嘗試使用由JavaScript事件觸發的PageMethod。這需要在aspx中有一個ScriptManager。

實施例: 的JavaScript後面

[PageMethod] 
public static void RevokeAuthentication() 
{ 
    // Do stuff here 
} 

function LeavePage(e) { 
    PageMethods.RevokeAuthentication(); 
} 

window.onbeforeunload = LeavePage; 

C#代碼然而,該方法並非萬無一失。如果客戶端的瀏覽器禁用了腳本,則JavaScript將不會運行。

也許更好的方法是在會話中處理MasterPage中的身份驗證。 MasterPage與PHP開發人員使用的包含類似。

E.g. OnLoad檢查頁面,如果pageName允許更高的身份驗證,請設置它,否則撤消它。

+0

AjaxPro還提供了類似的功能,易於使用。 http://www.ajaxpro.info/Examples/Classes/default.aspx – 2011-04-18 10:19:04

+0

如果您願意,jQuery也可以調用PageMethod。 – 2011-04-19 00:43:59