我有我的站點的一部分,用戶可以在其中添加地址到他們的帳戶。他們可以添加儘可能多的(運輸,賬單等)。.NET MVC一個視圖上的相同表單的多個版本
我做一些事情,使得新增的地址後,用戶看到的地址在更新形式「保存」和「刪除」按鈕。用戶可以調整他們添加的任何地址。
我遇到的問題是驗證。假設第1行是必需的。如果我正在更新三個地址中的第二個,並將第一行留空,則控制器發出錯誤(使用來自Nerd Dinner的相同技術,BTW)。這很好。最糟糕的是,視圖中列出的所有地址上的所有地址信息現在均顯示爲引發錯誤的地址的值。
我知道這事做與模型約束力,但我很困惑,因爲表單數據設置如下:
<%= Html.TextBox("Line1", Model.Address.Line1)%>
傳遞進來的模式是獨一無二的,我們的地址在客戶端地址列表中。我不確定爲什麼「Model.Addres.Line1」中的值被ModelState ModelErrors集合中的數據覆蓋。我猜默認行爲是在錯誤集合存在時使用它們中的值。當視圖中有多個表單並且表單使用與其他表單相同的名稱作爲輸入字段時,這是一個問題。
是我唯一的變通這裏avoind的HTML輔助功能和硬編碼的輸入在HTML?
每個地址都有一個單獨的表格。如果我使用唯一ID來標記字段名,那麼我將失去控制器中更新所需的模型綁定。順便說一句,當沒有驗證錯誤時,更新成功。我只是在發生錯誤時遇到問題。 – mikerennick 2009-07-08 13:22:35
是的,你確實失去了自動模型綁定。如果你想保留它,你必須有三個模型綁定(其中2個將始終爲空) - 還有一個綁定的前綴選項。 或者,你可以做兩件事情: a)只顯示validationMessage()用於提交的表單。不要爲尚未提交的地址調用validationMessage()。儘管如此,視圖會有點混亂。 b)保持Html.TextBox()相同,但只將前綴添加到ValidationMessage()。在控制器中執行一些操作來重命名視圖狀態中的驗證錯誤。也雜亂。 – 2009-07-08 16:03:11