我知道如果我想将非顺序元素绑定到 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。
注意:我以前从来没有弄乱过自定义模型绑定器,所以我真的只是在寻找一些关于它是否可能(或只是一个死胡同)的一般指导,以及一些入门指南。