生产机器上的ModelState.isValid = false,在开发机器上为true

时间:2013-08-15 17:09:55

标签: jquery asp.net-mvc-3 iis modelstate jquery-jtable

我在我的ASP.Net MVC 3应用程序中使用jQuery jTable插件作为CRUD表。在我的开发机器上运行代码工作正常。但是,当我将代码移动到生产服务器时,我无法向jTable添加新的事件/行,因为我不断收到错误“表单无效!...”,这是由if(!ModelState.IsValid)在控制器中触发的。

接下来,我使用ModelState.Values.SelectMany(v => v.Errors)从ModelState中获取错误并将它们放入JSON响应中,这就是我的ModelState无效的原因:"ErrorMessage=The value '15/08/2013 11:00:00' is not valid for Timestamp."

所以我的问题是,为什么我的开发服务器的日期字符串没问题但生产无效?

此外,无效的模型是由EF Database First创建的,所以我没有自己设置任何DataAnnotations。似乎默认的模型绑定器在我的生产系统上无法正常工作。

可能是因为我使用的是DD / MM / YY而不是MM / DD / YY吗?这是加拿大的方式..

编辑:啊哈!它是因为文化特定的格式,我首先尝试通过将生产环境中的文化设置从美国切换到CA来修复它,但这仍然无法解决它。所以我接下来要做的就是在Web.config部分system.web内的<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-CA" uiCulture="en-CA"/>中添加一行,现在情况正常。希望这有助于某人!

1 个答案:

答案 0 :(得分:0)

正如我在编辑中提到的,我找到了问题的原因并解决了我的问题。它是由参数的自动绑定引发的错误引起的,以及它在我的生产机器上遇到日期问题的原因是由于该机器上的区域设置(dd / mm / yy vs mm / dd / yy) 。为了解决这个问题,我设置了计算机区域设置(在控制面板中),并在我的Web.config中添加了一行。