C#MVC Controller无法从Ajax POST请求中获取十进制或双精度值

Ogg*_*las 12 javascript c# ajax asp.net-mvc

我的问题是,当我尝试通过ajax将double或decimal发送到我的C#MVC Controller时,该值始终为null.我可以将值作为字符串发送,我可以毫无问题地发送整数.为什么我不能发送带小数的值?当我检查从客户端发送的请求时,存在正确的值(表单数据是price=84.50).

错误:

参数字典包含非可空类型'System.Decimal'的参数'price'的空条目

HTML:

 <input type="number" step="1" class="form-control" name="price" id="price">
 <button type="button" class="btn btn-success">Send</button>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$('.btn-success').click(function () {

    //var price = $('#price').val(); - Did not work
    //var price = Number($('#price').val()); Did not work
    var price = Number($('#price').val()).toFixed(2); // Does not work

    $.ajax({
        url: 'PriceFunction',
        type: 'POST',
        data: {
            price: price,
        }
    }).done(function () {

    }).fail(function () {
        console.log("Error in ajaxfunction!");
    });
});
Run Code Online (Sandbox Code Playgroud)

C#:

    [HttpPost]
    public void PriceFunction(decimal price)
    {
     // I have tried with decimal, double and double?.     
    }
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 10

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

data: JSON.stringify({ Price: 5.0 })
Run Code Online (Sandbox Code Playgroud)

这是因为默认绑定器将十进制视为整数.

您当然可以更改为使用DecimalModelBinder以下链接中详述的内容:

ASP.NET MVC3 JSON十进制绑定问题


Mat*_*ier 7

这可能是一个文化问题

确保您发送到您的操作的字符串符合当前的Culture.(检查十进制数字分隔符. ,)

为例

例如,在法语服务器上,99.1将不被理解为99,1,但将被转换为0.

在这种情况下,一种解决方案是在您的文化中定义文化 Web.Config

  <system.web>
    ...
    <globalization uiCulture="en" culture="en-US"/>
  </system.web>
Run Code Online (Sandbox Code Playgroud)

或者,在客户端更换适当的分隔符.

  • 正是我的问题!!谢谢,你节省了我很多时间,我从来没有想到过:) (2认同)