为什么我的ajax调用(返回json)没有得到十进制属性?

时间:2012-02-05 18:32:11

标签: json asp.net-mvc-3 jquery

我有一个ajax调用,它是:

$(document).ready(function () {
    $("a").click(function (event) {
        $.ajax({
            url: '/',
            type: 'POST',
            data: JSON.stringify({ Name: 'foo', Price: 5.0 }),
            contentType: 'application/json',
            dataType: 'json',
            success: function (data) { alert(data); }
        });

        event.preventDefault();
    });
});

这是我的viewmodel。

    public class ProductViewModel
{
    [Required, StringLength(60)]
    public string Name { get; set; }

    [Required, Range(0, 100000)]
    public decimal Price { get; set; }
}

当我发送电话时......只有'foo'填充在viewmodel P中,而不是价格。

        [HttpPost]
    public JsonResult Index(ProductViewModel p)
    {

        var rslt = "success";
        return Json(rslt);
    }

我正在使用

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我在这里找到了有趣的东西http://digitalbush.com/2011/04/24/asp-net-mvc3-json-decimal-binding-woes/comment-page-1/#comment-3356

如果你没有添加任何小数值,如下所示:

data: JSON.stringify({ Name: 'foo', Price: 5.0 })

默认绑定器将其视为整数。如果您使用5.35作为示例它将起作用。解决方案在链接中提供。您只需使用DecimalModelBinder来修复此问题的十进制值。

答案 1 :(得分:-1)

尝试使用:

[Required, Range(0.0, 100000.0)]