我知道如果我想将非顺序元素绑定到MVC中的列表,我可以使用here所述的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
,模型绑定器不知道如何处理此问题。它既不能绑定到User
,也不能绑定List<User>
,也不能绑定AddUser
。
这让我想到了我的问题。
是否有办法编写可以处理非顺序列表的自定义模型绑定器,而无需使用Index
表示法?我必须承认,我很难理解为什么Index
符号是必要的(除非作为某种优化)。
我正在使用MVC 4和.NET 4.5。
注意:之前我从未搞过自定义模型绑定器,所以我真的只是在寻找关于它是否可能(或者只是一个死胡同)的一般指导,以及可能是一些入门指南。