2009-02-05 53 views
5

我能想到的最好的公共示例是我的頭頂上的亞馬遜購物車。如果你有一個頁面顯示多個不同的記錄,可以有多個不同的字段更新。在MVC中處理重複表單的最佳方式是什麼?

我不能把每個人放在一個表單標籤,因爲用戶可能會修改多個記錄,然後提交。

我不能只是更新所有我回來的記錄,因爲:
1.性能
2.審計
3.如果有人改變了記錄用戶「沒有改變」,當他們查看頁面,然後用戶提交這些更改將被覆蓋。

那麼如何最好地處理獲取數據,然後獲取哪些記錄從那裏改變?

這是明確的嗎?

回答

3

使用綁定!不要在您的操作中迭代表單集合。

史蒂夫桑德森寫了一個blog post關於如何做到這一點。我寫了一個blog post關於如何使用MvcContribFluentHtml。這兩篇文章都非常詳細,包括可下載的代碼。

1

在轉發器中生成您的表單,並將ID附加到表單元素,每個新表單都會增加。將重複表單元素的數量保存在隱藏字段中。然後在你的控制器中,讀取這個隱藏字段的值 - 這將是要讀取的表單的數量。然後,在一個循環中,通過指定該字段的名稱以及追加到該名稱的循環索引作爲關鍵字來檢索每個表單的字段。

您可以使用一些javascript邏輯來檢測表單的值何時更改,並在該表單的部分發生更新時更新隱藏字段;或者你可以隱藏每個表單部分的隱藏字段中的原始值(儘管我不建議這麼做,因爲太多的字段/表單會使你的頁面膨脹)。

+0

我想我喜歡那樣。隱藏的字段+ JS更新告訴記錄何時改變是我沒有想到的。 我想我甚至可以編寫一個模型聯編程序來獲取作爲操作參數的集合。 – 2009-02-05 21:54:43

+0

模型綁定器絕對是一個好方法。 :) 讓我們知道怎麼回事。 – 2009-02-05 22:08:31

1

一個(但不一定是最好的)方法是存儲哪些項目在js變量或客戶端中被更改,因爲它們被更改爲,然後僅發送與實際不同的數據用戶收到了。

正如Erik所說,您可以使用隱藏的表單元素來確保它在沒有js的情況下也能正常工作。

相關問題