8

我知道如果我想将非顺序元素绑定到 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。

注意:我以前从来没有弄乱过自定义模型绑定器,所以我真的只是在寻找一些关于它是否可能(或只是一个死胡同)的一般指导,以及一些入门指南。

4

1 回答 1

0

我能够通过调整这个答案中的解决方案来解决我的问题– Eric 2013-03-22 22:28:07

于 2014-02-07T16:05:51.543 回答