【问题标题】:ASP.NET MVC3 RC2 bug binding from request parameters to method parameters从请求参数到方法参数的 ASP.NET MVC3 RC2 错误绑定
【发布时间】:2012-03-01 12:58:30
【问题描述】:

我在将值发布到其中一个参数是可为空的 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//1/2009 号码:156 表单搜索:真

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

1//1/2009//真

如果我改变 int? number 转 int number,结果正确:

1//1/2009/156/真

在 MVC3 RC1 中,可空 int 没有任何问题

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

【问题讨论】:

  • 你不能把网站更新到 MVC3 RTM 吗?

标签: asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

这是 MVC 3 RC2 版本中的一个已知错误。 ScottGu said:

我们已经看到一些关于元数据缓存错误的报告,该错误至少在两种情况下表现出来:

  • 动作方法中的可空参数存在问题:当您的控制器动作方法带有可空参数(如 int? - 或具有可空子属性的复杂类型)时,可空参数可能始终为空 -即使请求包含参数的有效值。

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

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

但实际上您应该更新到 RTM。如果 RC2 的上线许可证在 RTM 版本之后仍然存在,我会感到非常惊讶。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多