2013-07-22 29 views
0

我知道有很多關於如何禁用ViewState不會阻止文本框在刷新/回傳中保留值的信息。我無法做到的是關於如何規避這種行爲的信息。強制ASP.NET控件重新加載數據

這就是爲什麼我需要這樣做。我有一個通過AJAX更新數據庫的表單。每次用戶更改一個字段時,數據庫都會立即更新。因此,除了數據庫之外,沒有任何理由在任何地方存儲值。

請考慮以下情況。

  1. 用戶加載頁面,textbox FirstName的值爲「Bob」。
  2. 用戶將名字更改爲「Dave」。 (數據庫更新)
  3. 用戶單擊刷新按鈕。

我們期望FirstName框現在具有「Dave」的值,但它會顯示「Bob」。那麼如何強制ASP從db中加載值呢?

+0

只有在提交/回傳信息後纔會更改這些值。您可以使用AJAX調用來執行此操作而無需刷新。 – PiLHA

回答

1

用戶單擊刷新按鈕。

在此步驟中,您將重新讀取數據庫中的數據,並強制使用該數據填充控件。如果頁面中的所有「事件」實際上都是通過AJAX請求處理的,那麼聽起來像是唯一兩個有意義的「WebForms事件」是「刷新」按鈕的Page_LoadClick處理程序。這兩個事件之一應該重新填充數據庫中的控件。

(或者是有沒有「刷新」按鈕,用戶只需重新加載通過瀏覽器功能的頁面呢?在這種情況下,Page_Load應該只是始終在這種情況下填充從數據庫中的控件。)

+0

啊哈。問題是我在Page_Init中填充,而不是Page_Load。謝謝! – christok

+0

此更新。它對於「常規」控制似乎工作正常,但不是那些動態創建的。我可以在代碼隱藏中驗證是否爲動態控件設置了正確的值,但這些似乎在某種程度上被覆蓋了。有什麼想法嗎? – christok

+0

@christok:他們在哪裏被覆蓋? WebForms頁面生命週期中的頁面控件有很多事情發生。這可能足以應用一個新問題,但最起碼​​優點是用代碼來更新現有問題以重現這種觀察到的行爲。 – David

1

看來我遇到的問題與在正確的頁面事件期間創建和填充控件有關。通過在Page_Init中創建控件並將其填充到Page_Load中來解決這個問題。

+0

事件的順序聽起來更接近引擎內部在WebForms頁面生命週期中執行的操作:http://msdn.microsoft.com/zh-cn/library/ms178472.aspx基本上,Init階段是控件所在的位置創建,並且加載階段是可以設置其屬性的位置。 – David