在将值发布到控制器方法时遇到错误,其中一个参数是可为空的int。 重现的步骤:
我已经创建了一个测试方法
[HttpPost]
public ActionResult PostTest(string from, int? number, bool? formsearch)
{
return new ContentResult { Content = string.Format("{0}/{1}/{2}", from, number, formsearch) };
}
使用jquery,我创建了一个Post请求
$.post("http://localhost/mysite/test/posttest",{ from:"1//1/2009",number:"156",formsearch:true});
请求(例如,在fiddler中)清楚地显示了正在发送的值:
自:1 //二千○九分之一 数量:156 formsearch:true
但是从这个函数返回的结果是:
1 // 1/2009 //真
如果我改变int? number到int number,结果是正确的:
1 // 1/2009/156 /真
在MVC3 RC1中,这对nullable int
没有任何问题更新:我似乎没有新创建的MVC3网站的问题。我的项目中有什么能影响模型绑定到可空int的?为什么RC1和RC2之间会有区别?有人建议调试这个模型绑定问题吗?
答案 0 :(得分:2)
这是MVC 3 RC2版本中的已知错误。 ScottGu said:
我们已经看到一些元数据缓存错误的报告,这些错误在至少两种情况下表现出来:
- 操作方法中的可空参数存在问题:如果控制器操作方法具有可为空的参数(如int? - 或具有可为空的子属性的复杂类型),则可以为null的参数可能总是为空 - 即使请求包含参数的有效值。
我链接的博客文章包含一个解决方法:在Application_Start
添加一行:
// Workaround to fix RC2 bug with Metadata caching
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
但实际上你应该更新到RTM。如果RC2的上线许可证在RTM版本之后幸存下来,我会感到非常惊讶。