gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:37:30 26 4
gpt4 key购买 nike

我最近在为客户实现 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com