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

时间:2013-03-22 17:26:31

标签: .net asp.net-mvc validation model-binding unobtrusive-validation

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

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

1 个答案:

答案 0 :(得分:0)

  

我能够通过调整this answer的解决方案来解决我的问题 - Eric 2013年3月22日22:28