2012-02-05 41 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

相關問題