MVC3 Json Bind Bug?

Mik*_*ike 7 c# asp.net-mvc json asp.net-mvc-3

我最近在为客户端实现JSON解决方案时遇到了一个问题.如果操作参数名称与模型的属性名称匹配,则绑定程序无法绑定任何属性.

一个例子:

控制人

public ActionResult SetEmails(Person emails){
    ...
    return Content("");
}
Run Code Online (Sandbox Code Playgroud)

因为参数名称被称为"电子邮件"并且匹配名为"电子邮件"的人员模型的属性名称...绑定程序失败,但没有给出任何关于为什么的指示.

他们有一个名为Person的模型

public class Person {
    public string Name { get; set; }
    public List<string> Emails { get; set; }

    public Person() {
        Emails = new List<string>();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是一个"功能"?

正如旁注,我的问题更多的是关于参数名称如何导致与活页夹的冲突?名称应该无关紧要,因为它是定义它的模式以匹配json数据的类类型.为什么绑定器应该关注您为参数命名的内容,或者它是否与参数本身的类类型中的属性名称匹配?

cou*_*ben 2

问题是您的字典中存在歧义,两个元素都名为“emails”(尽管大小写不同)。 DefaultModelBinder无法解决这个歧义。

两种可能的解决方案:(1)如果您要传回整个人员模型,请将顶级元素的名称更改为“人员”(在给定上下文的情况下,这更有意义),这将消除歧义,并允许绑定按预期进行,或者 (2) 如果您只是传回电子邮件列表,请将您的操作签名更改为public ActionResult SetEmails(List<Emails> emails)

我不会将您所经历的称为错误或功能,而是您的设计问题。