2011-07-07 120 views
2

我遇到了一個奇怪的問題。每次刷新頁面時,IsPostBack都是錯誤的。
爲了確保我的內容或母版頁中沒有任何內容或母版頁造成這種情況,我創建了一個空白的Web表單,並以調試模式啓動它。仍然,在回發,我有IsPostBack設置爲false。IsPostBack總是返回false

我在web.config中有enableSessionState="true"<sessionState timeout="30" />

這讓我瘋狂!

更新:我按F5刷新頁面。根據答案,這不應該導致回發。我想知道什麼時候使用刷新頁面(甚至手動),並防止對數據庫進行一些修改)。
有沒有解決方案?

+0

你有enableviewstate嗎?設置 – kobe

+3

當你說'刷新頁面',你的意思是手動或實際通過點擊服務器端控制如按鈕? – keyboardP

+0

是的,我已將'enableViewstate'設置爲true – Kamyar

回答

11

刷新頁面(按F5 在瀏覽器中刷新按鈕)不是回發。當單擊按鈕,更改下拉列表或導致數據發送到服務器的某些其他事件(通過HTTP POST,因此名稱'回傳')時發生回發

您的問題不會並不清楚您是手動刷新頁面,還是通過點擊按鈕或其他事件回發到服務器。

由於您手動刷新頁面,因此IsPostBack將始終爲假。

有兩種類型的ASP.NET請求(在一定意義上)的:

  • 定期請求(例如,用戶加載頁的第一次)
  • 回傳(如按鈕被點擊在頁面上,發送數據到服務器)

如果你想跟蹤用戶是否曾經去過一個頁面,無論如何,你需要跟蹤你的自我。您可以在會話中設置一個變量來做到這一點:

Session["UserHasVisitedThisPageBefore"] = true; 

然後你就可以代替你當前IsPostBack檢查的檢查:

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"]) 
{ 
    // stuff here 
} 
+0

感謝您的回答。但是使用會話狀態變量不是一個好的選擇,因爲每當用戶離開頁面時,我都必須刪除它,否則,如果用戶轉到其他頁面並返回,它仍然是錯誤的。我認爲使用隱藏字段是處理這個問題的最佳選擇。 – Kamyar

5

刷新頁面時,IsPostBack應該是false。當控件導致回發時,例如服務器端按鈕,它就變成了真的。您可以使用IsPostBack來確定是否要更新數據庫。如果它是錯誤的,請不要更新數據庫,否則請更新它。

if(IsPostBack) 
{ 
    //Update DB 
} 
+0

感謝您的回答。但我的問題是當用戶刷新頁面時,IsPostbBack總是錯誤的。凱爾的答案提出我應該使用會話變量。 +1雖然。 – Kamyar

1

每次刷新你基本上執行GET請求頁面你的頁面。 GET意味着,加載頁面時不需要更改狀態服務器。 IsPostBack =虛假是絕對正確的行爲!

回發將發生在頁面上,如果您對其進行POST。然後提交服務器端表單或者使用autoPostBack進行網頁控制 - 這會導致回發。 IsPostBack將是真實的。

2

聽起來就像你需要一些其他機制來檢測頁面被刷新,像一個計數器。視圖狀態,會話,隱藏字段 - 有很多選項。

0

我有這個問題的IsPostBack總是在特定的項目中有XSL渲染標記的錯誤。因此,我只是檢查了Request.HttpMethod,而不是依賴.NET的IsPostBack屬性。

例如如果我需要檢查!IsPostBack,我會檢查Request.HttpMethod ==「GET」

例如,如果我需要檢查IsPostBack,我反而檢查了Request.HttpMethod ==「POST」