Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ASP.NET MVC 4路由损坏十进制json值_Jquery_Asp.net Mvc_Json_Asp.net Mvc Routing - Fatal编程技术网

Jquery ASP.NET MVC 4路由损坏十进制json值

Jquery ASP.NET MVC 4路由损坏十进制json值,jquery,asp.net-mvc,json,asp.net-mvc-routing,Jquery,Asp.net Mvc,Json,Asp.net Mvc Routing,我在控制器中有一个方法: [HttpPost] public virtual JsonResult Add(AddItemModel request) 这将接收一个AJAX调用。JSON请求发送“AddItemModel”类的序列化版本,MVC路由创建具有所有预期属性(包括字符串、整数和小数等数据类型)的AddItemModel 然后我将其部署到我们的QA服务器上,其行为是不同的。JSON请求是相同的(由Fiddler检查),但是AddItemModel现在已经填充了它的所有属

我在控制器中有一个方法:

    [HttpPost]
    public virtual JsonResult Add(AddItemModel request)
这将接收一个AJAX调用。JSON请求发送“AddItemModel”类的序列化版本,MVC路由创建具有所有预期属性(包括字符串、整数和小数等数据类型)的AddItemModel

然后我将其部署到我们的QA服务器上,其行为是不同的。JSON请求是相同的(由Fiddler检查),但是AddItemModel现在已经填充了它的所有属性,除了十进制属性-它的值为零,这是默认值

我找不到我们的开发环境和QA服务器之间的任何区别,但我可能没有看到正确的东西

有人能提出是什么导致了这种差异吗

Dev是Win7,QA是Win2003服务器,都运行最新的补丁程序

提前谢谢

格里夫


更新#1

我们为decimal和nullable decimal类型添加了一个自定义模型绑定器,并为此添加了跟踪功能,以便能够确定发生了什么

当值输入时,我们获取了尝试的值:

var attValue = modelBindingContext.ValueProvider
    .GetValue(modelBindingContext.ModelName).AttemptedValue;
然后将其转换为十进制值。我们还测试了基的BindModel(控制器、上下文)将返回什么

对于我们来说,当尝试的值为“5”时,我们的转换为十进制值5。但是MVC代码无法处理这个问题-它返回“”作为对象,然后作为零到达控制器方法

然而,当尝试的值为“5.1”时,我们的代码和MVC代码都正确地给了我们5.1的小数点

因此,在我们看来,当:

  • JSON的值为:5
  • MVC尝试将其绑定到数据类型为decimal的POCO属性,但失败
但当:

  • JSON的值为:5.1
  • MVC试图将其绑定到数据类型为decimal的POCO属性,这是可行的
正如我提到的,这只发生在我们的QA服务器上,而不是在开发中。这是否意味着微软可能已经解决了这个问题?但正如前面提到的,我们的开发环境和QA环境似乎都已完全修补


这里有什么建议吗?

请参阅。简而言之,默认模型绑定器使用.net的类型转换器,它不能将整数转换为小数。

检查分隔逗号,是
还是
?也许JSON序列化会在区域性之间切换,因此会破坏浮点数字。服务器(en-US)和开发机器(en-GB)都以相同的方式使用点和逗号,但我应该更新代码以明确强制使用区域设置。在本例中,小数点仅为“6”(不带引号)。JSON的相关部分是“…,399.99,“ParameterOfInterest”:6}]}”添加了更新#1和一些附加信息。