2010-04-09 99 views
3

我已經閱讀了asp.net MVC應用程序中沒有的viewstate。 我在做模型驗證。現在,如果我的網頁上有兩個文本框,並且我正在爲模型中的兩個人進行所需的驗證。這個驗證是在服務器端單擊一個按鈕完成的。我將填寫一個文本框並單擊提交按鈕。它進行驗證並返回結果,說第二個字段是必需的。此時保留第一個文本框的值。那麼你能告訴我這個文本框在回發後如何保留這個值嗎?在ASP.NET MVC應用程序中的視圖狀態

+0

該值在html中重新發射!?! – 2010-04-09 13:48:09

回答

0

該文本框的值綁定到模型值。

驗證失敗後,該頁面會在提交的狀態(即第一個文本框的值)和添加的任何ModelState錯誤時與其模型重新顯示。

沒有ViewState的未來在玩;-)

善良,

9

沒有「回傳」。只有一個帖子。

  1. 服務器返回HTML。
  2. 瀏覽器呈現它。
  3. 用戶發佈廢話數據。
  4. 用戶提交的所有數據都保存在Controller.ModelState集合中。
  5. 如果存在驗證錯誤,則每個ModelState條目都有其Errors屬性集。
  6. 服務器查看垃圾數據。返回與(1)相同的頁面,除了它包含用戶提交的數據,好或壞以及廢話數據的驗證錯誤。
  7. 瀏覽器呈現。

你打電話時,說,Html.TextBox("someName", someValue)則文本框將包含someValue除非有一個爲"someName"一個ModelState關鍵,在這種情況下,從ModelState值來代替。這是最初顯示默認數據(如果有)的方式,但用戶數據在出現錯誤後顯示。

+0

用戶發表廢話數據 - 除非是開發者:) – Aristos 2010-04-09 14:21:29

+0

謝謝所有的答案。 Howe模型狀態在內部存儲post之間的值嗎?它使用tempdata或任何其他方法? – Shetty 2010-04-12 08:18:56

+0

它沒有。 'ModelState'只在'POST'和你的應用程序對它的響應之間的時間內使用。然後它被遺忘了。 – 2010-04-12 13:02:15

2

閱讀關於ModelState。發佈http表單時,值存儲在ModelState對象中,並在使用html助手(Html.Label,Html.Hidden,Html.TextBox)再次生成表單時重用。

  1. 表單使用Html.TextBox()顯示。
  2. 用戶首次輸入值。
  3. 表格已過帳。
  4. ModelState對象保存文本框值。
  5. 窗體再次使用Html.TextBox()第二次顯示。方法查看ModelState並在第一次發佈時再次設置它的值。即使您提供了新的值,它也會在ModelState對象中進行搜索。
-1

使視圖狀態實際上應該如果你回發到

同一頁面保留控件的值
+0

MVC背後的想法是分離問題,不要將業務邏輯與視圖或UI混合在一起,並使用測試方法輕鬆測試網站http://forums.asp.net/t/1215012。 ASPX – 2011-06-21 11:03:16

1

視圖使用模型呈現。在失敗的驗證中,如果您將相同的模型(帶有ModelState錯誤)傳遞給視圖,它將使用額外的驗證消息重新填充相同的視圖,這些消息使用ModelState Errors進行渲染。