【问题标题】:How do I pass decimal values to controller using Ajax?如何使用 Ajax 将十进制值传递给控制器​​?
【发布时间】:2017-02-15 09:23:33
【问题描述】:

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

【问题讨论】:

  • 试试{x: 1.1};
  • 刚刚对我的帖子做了一个小的编辑。问题是直接从输入字段中取出数据时: $("#input").val()
  • parseFloat($("#input").val()
  • 如果是这样,请在将其放入对象之前尝试修剪该值
  • 我对 parseFloat 没有任何运气。 “修剪”是什么意思?以什么方式?

标签: c# .net ajax binding decimal


【解决方案1】:

发送十进制值时需要对数据进行字符串化。

data: JSON.stringify({ x: 5.0 })

这是因为默认绑定器将小数视为整数。

请查看以下链接以获取更多信息:-

C# MVC Controller cannot get decimal or double values from Ajax POST request

编辑 1:-

你也可以试试:-

parseFloat(value).toFixed(2)

【讨论】:

  • 我试过了。同样的错误。编辑:toFixed(2) 没有更好的工作。
【解决方案2】:

按原样发送值并尝试在控制器中进行转换

 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);

【讨论】:

  • 我无法使用 var 作为参数类型。据我所知,编译器将无法推断出类型。至少我得到一个错误。
  • 我已经尝试过使用 double.Parse() 它可以正常工作,您只需将“,”替换为“。”
【解决方案3】:

我遇到了同样的问题,使用双精度(不是小数),但我认为解决方案可能是相同的。 对我来说,这完全是关于文化和设置正确的数字格式!

解决方案:

NumberFormat = NumberFormatInfo.InvariantInfo;

这是app的CultureInfo的参数!您可以在多个位置进行设置。如果您的应用中只有一种文化,请将其设置为 Application_Start() 上的 Global.asax

Web.config 上没有变化,并且可以与 $("#input").val() 一起使用(有或没有 parseFloat())。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多