2012-02-05 40 views
0

我有一个Ajax调用是:为什么我的ajax调用(返回json)没有获得小数属性?

$(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(); 
    }); 
}); 

这里是我的视图模型。

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

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

当我发送呼叫......只有“富”是在对视图模型P,但不是价格。

 [HttpPost] 
    public JsonResult Index(ProductViewModel p) 
    { 

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

我现在用的是

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

任何想法?

回答

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

尝试使用:

[Required, Range(0.0, 100000.0)] 
+0

这是一个验证器,不幸的是,这与我对不起的问题无关。 – Rushino 2012-02-06 01:07:05

+0

你有没有想过尝试这个解决方案?你可以带马去水。但你不能喝它! – 2012-02-06 05:56:59

+0

我试过不用担心。 :)但正如我所说的问题是无关的验证,我很确定。问题是默认模型绑定器中的一个错误,它将decimal看作int。 – Rushino 2012-02-06 13:55:01

相关问题