Dot-Net

使用自定義模型綁定器綁定非順序列表

  • February 7, 2014

我知道如果我想將非順序元素綁定到 MVC 中的列表,我可以使用此處Index描述的語法。

但是,我無法獲得遠端驗證來處理這個(使用Remote屬性)。

例如,如果我有這樣的模型:

public class AddUsers {
   public List<User> Users { get; set; }
   public string Comment { get; set; }
}

public class User {
   [Remote("UsernameAvailable", "User")]
   public string Name { get; set; }
}

然後假設在我看來我有以下內容(為了清楚起見,我故意省略了我正在使用的 Html 助手):

<input type="hidden" name="Users.Index" value="foo" />
<input type="text" name="Users[foo].Name" />

<input type="hidden" name="Users.Index" value="bar" />
<input type="text" name="Users[bar].Name" />

在表單文章中,該Index欄位隨順,這有助於模型綁定器很好地綁定所有內容,例如:

Comment=bla&Users.Index=foo&Users[foo].Name=john&Users.Index=bar&Users[bar].Name=bob

但是當遠端驗證觸發時,只有這個被發送到我的操作(兩個單獨的請求,每個被驗證的項目一個):

Users[foo].Name=john
Users[bar].Name=bob

沒有Index,模型綁定器不知道如何處理它。它既不能綁定到 a User、 aList<User>或 a AddUser

這讓我想到了我的問題。

有沒有辦法編寫一個自定義模型綁定器,可以處理非順序列表而無需使用Index符號?我必須承認,我很難理解為什麼這個Index符號是必要的(也許作為某種優化除外)。

我正在使用 MVC 4 和 .NET 4.5。

**注意:**我以前從來沒有弄亂過自定義模型綁定器,所以我真的只是在尋找一些關於它是否可能(或只是一個死胡同)的一般指導,以及一些入門指南。

我能夠通過調整這個答案中的解決方案來解決我的問題– Eric 2013-03-22 22:28:07

引用自:https://stackoverflow.com/questions/15576441