如何使用Ajax将十进制值传递给控制器​​?

时间:2017-02-15 09:23:33

标签: c# .net ajax binding decimal

我有一个数字输入,当用户输入一个数字时,它将使用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});
}

3 个答案:

答案 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())一起使用。