我有一个数字输入,当用户输入一个数字时,它将使用Ajax从视图发送到控制器。一切正常,但当用户输入十进制数字时,我会遇到绑定错误(1,1或1.2等)。我希望用户能够使用十进制数字。
这是相关的查看代码:
var postdata = {x: <number input value>};
$.ajax({url: url, type: "POST", data: postdata, async: false})
这是控制器功能:
[HttpPost]
public ActionResult MyFunction(decimal x)
{
return Json(new {success = true, JsonRequestBehavior.AllowGet});
}
答案 0 :(得分:0)
发送小数值时,需要对数据进行字符串化。
data: JSON.stringify({ x: 5.0 })
这是因为默认绑定器将小数视为整数。
有关更多信息,请查看以下链接: -
C# MVC Controller cannot get decimal or double values from Ajax POST request
编辑1: -
您也可以尝试: -
parseFloat(value).toFixed(2)
答案 1 :(得分:0)
只需按原样发送值,然后尝试转换为控制器
var postdata = {x: $("#input").val()};
$.ajax({url: url, type: "POST", data: postdata, async: false})
这是控制器功能:
[HttpPost]
public ActionResult MyFunction(string x)
{
double z=Convert.ToDouble(x.Trim()); // trim just in case....
return Json(new {success = true, JsonRequestBehavior.AllowGet});
}
如果您尝试双击它,它应该工作(替换。,)
double.Parse("52.8725945", System.Globalization.CultureInfo.InvariantCulture);
答案 2 :(得分:0)
我遇到了一个相同的问题,使用双精度(不是小数),但是我认为解决方案可能是相同的。 对我来说,这全都是关于文化和设置正确的数字格式!
解决方案:
NumberFormat = NumberFormatInfo.InvariantInfo;
这是应用程序CultureInfo
的参数!您可以在多个位置进行设置。如果您的应用只有一种文化,请在Application_Start()
的{{1}}上进行设置。
Web.config上没有更改,并且可以与Global.asax
(带有或不带有$("#input").val()
)一起使用。