2009-09-08 173 views
0

在我的MVC應用程序的預訂住宿我有以下幾點:MVC驗證多種形式

  • 行動來顯示所選擇的房間與輸入形式的額外信息GET:「詳細信息」 這種觀點有多種形式它,每個發佈到不同的行動。

例子:

  • 行動更新的客人POST數: 「UpdateGuests」
  • 行動選擇開始日期POST: 「SelectStartDate」
  • 行動增加早餐POST:「AddBreakfast 「
  • 刪除空間POST的操作:」RemoveProductFromCart「
  • 進入下一步驟的操作POST:」繼續「

大部分操作都將回重定向到GET:「詳細信息」視圖,如果需要的話用戶可以執行其他操作,在該進行的情況下,這將重定向到下一個視圖或有某種原因他們無法繼續它將顯示驗證消息,爲什麼在「詳細信息」視圖。

我不確定處理驗證的最佳方式,以下是我想到的一些選項。

  • 使用的TempData []存儲驗證信息並重定向到「詳細信息」查看我們添加任何TempData的錯誤,所以ModelState中。
  • 在POST:「XXXXXX」行動填充的ModelState和渲染「詳細信息」

這不是一個高容量的網站,以便TempData的是一個選項。

任何想法感激地歡迎。

編輯: 附加信息:

  • 我使用DataAnnotations在一些地方的驗證規則。
  • 正在計劃添加Ajax作爲漸進式增強,但它應該沒有工作。
+0

重定向的好處是如果用戶刷新它不會要求重新發布數據 – Myster 2009-09-08 21:43:56

+0

我會給馬丁一個答案,這是我現在要做的,但如果任何人有更好的主意我仍然可以從我看到此頁面上改變我的主意;-) – Myster 2009-09-10 02:23:27

回答

1

我認爲你的第二個選擇是最好的:每個崗位的行動將做必要的驗證,填充錯誤信息和每一個崗位的ModelState將返回相同的觀點,用你的模型重建。

另一種選擇,有點困難,但給人一種更好的用戶體驗是使用Ajax調用做一些動作(如人的更新次數,選擇開始日期,加早餐)。這樣一來,你只能返回這一動作所需要的信息的點點,刷新屏幕的那一部分,如果需要添加一些錯誤消息。

我希望這將有助於。

+0

增加ajax作爲漸進式增強是計劃,但我們還沒有到那個:-) – Myster 2009-09-08 22:03:41

0

你看過書呆子晚餐如何驗證嗎?我已經使用這種方法與包含幾個部分視圖的表單,它很好。

你甚至可以動態修改使用jQuery,如果這就是你想要做什麼來驗證。

+0

(http://nerddinnerbook.s3.amazonaws.com/Part5.htm)書呆子晚餐似乎使用類似的方法來我的第二個選項。我使用DataAnnotations進行驗證,但這不應該影響原理。 – Myster 2009-09-08 22:01:09