c# - MVC3 Json 绑定(bind)错误?

标签 c# asp.net-mvc json asp.net-mvc-3

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

一个例子:

控制人员

public ActionResult SetEmails(Person emails){
    ...
    return Content("");
}

因为参数名称称为“emails”并且与名为“Emails”的 Person 模型的属性名称相匹配.. Binder 失败,但没有给出任何关于原因的指示..

他们有一个名为 Person 的模型

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

    public Person() {
        Emails = new List<string>();
    }
}

这是错误还是“功能”?

作为旁注,我的问题更多是关于参数名称如何导致 Binder 冲突?名称应该无关紧要,因为它是定义它的模式以匹配 json 数据的类类型。为什么 Binder 应该关心你给参数命名或者它是否与参数本身的类类型中的属性名称匹配?

最佳答案

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

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

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

关于c# - MVC3 Json 绑定(bind)错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245752/

相关文章:

c# - 我应该知道什么才能更好地理解 LINQ?

c# - Windows 应用商店应用程序中的 HtmlAgilityPack

c# - FIFO编程的主线程调度程序?

c# - 如何通过删除旧元素来清理字典

asp.net-mvc - jQuery 中 $.getJSON() 和 $.ajax() 之间的区别

javascript - 如何动态创建一个简单的json数组?

java - 在 Java 中使用 Jackson 从 ObjectNode 创建字符串的速度很慢

c# - 如何通过普通路由重定向

asp.net-mvc - 无法使用formdata Asp.net-mvc上传图片

javascript - 在 Vue 中使用 Axios 将查询参数传递给 URL 的最佳方式?