使用自定义模型绑定器绑定非顺序列表

Eri*_*ric 8 .net validation asp.net-mvc model-binding unobtrusive-validation

我知道如果我想将非顺序元素绑定到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; }
}
Run Code Online (Sandbox Code Playgroud)

然后假设在我看来我有以下内容(我故意遗漏我正在使用的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" />
Run Code Online (Sandbox Code Playgroud)

在一个表格帖子中,该Index字段一直用于骑行,这有助于模型绑定器很好地绑定一切,如:

Comment=bla&Users.Index=foo&Users[foo].Name=john&Users.Index=bar&Users[bar].Name=bob
Run Code Online (Sandbox Code Playgroud)

但是当远程验证触发时,只有这个被发送到我的操作(两个单独的请求,每个被验证的项目一个):

Users[foo].Name=john
Users[bar].Name=bob
Run Code Online (Sandbox Code Playgroud)

没有Index,模型绑定器不知道如何处理这个问题.它既不能结合到User,一个List<User>,也不是AddUser.

这让我想到了我的问题.

有没有办法编写一个自定义模型绑定器,可以处理非顺序列表而无需使用Index表示法?我必须承认,我很难理解为什么这种Index符号是必要的(除非作为某种优化).

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

注意:我之前从未搞过自定义模型绑定器,所以我真的只是在寻找一些关于它是否可能(或者只是一个死胡同)的一般指导,以及可能的一些启动指针.

Chr*_*att 0

\n

我能够通过调整此答案的解决方案来解决我的问题\xe2\x80\x93 Eric Mar 22 \'13 at 22:28的解决方案来解决我的问题

\n
\n