ASP.NET MVC3 RC2从请求参数绑定到方法参数的bug

将值发布到控制器方法时遇到错误,其中一个参数是可为空的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});

请求(例如,在小提琴手中)清楚地显示了正在发送的值:

自:1 //二千○九分之一
数量:156
formsearch:真

但是从这个函数返回的结果是:

1 //二千○九分之一//真

如果我改变int? number到int number,结果是正确的:

1 // 1/2009/156 /真

在MVC3 RC1中,这对nullable int没有任何问题

更新:我似乎没有新创建的MVC3网站的问题.我的项目中有什么能影响模型绑定到可空int的?为什么RC1和RC2之间会有区别?有人有调试这个模型绑定问题的建议吗?

最佳答案 这是MVC 3 RC2版本中的已知错误.
ScottGu said:

we have seen a few reports of a metadata caching bug that manifests itself in at least two scenarios:

  • Nullable parameters in action methods have problems: When you have a controller action method with a nullable parameter (like int? – or a complex type that has a nullable sub-property), the nullable parameter might always end up being null – even when the request contains a valid value for the parameter.

我链接的博客文章包含一个解决方法:在Application_Start中添加一行:

// Workaround to fix RC2 bug with Metadata caching
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

但实际上你应该更新到RTM.如果RC2的上线许可证在RTM版本之后幸存下来,我会感到非常惊讶.

点赞