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数据的类类型.为什么绑定器应该关注您为参数命名的内容,或者它是否与参数本身的类类型中的属性名称匹配?
问题是您的字典中存在歧义,两个元素都名为“emails”(尽管大小写不同)。 DefaultModelBinder
无法解决这个歧义。
两种可能的解决方案:(1)如果您要传回整个人员模型,请将顶级元素的名称更改为“人员”(在给定上下文的情况下,这更有意义),这将消除歧义,并允许绑定按预期进行,或者 (2) 如果您只是传回电子邮件列表,请将您的操作签名更改为public ActionResult SetEmails(List<Emails> emails)
。
我不会将您所经历的称为错误或功能,而是您的设计问题。
归档时间: |
|
查看次数: |
455 次 |
最近记录: |