2012-03-28 30 views
4

我有以下.NET類:這是一個錯誤?十進制屬性沒有得到來自JSON字符串反序列化(.NET MVC)

public class Product 
{ 
    public int ID {get;set;} 
    public String Name {get;set;} 
    public Decimal Price {get;set;} 
} 

而且在我的控制器動作:

[HttpPost] 
public ActionResult AddProduct(Product product) 
{ 
     // product.Price is zero!! 
} 

JSON字符串張貼在請求AddProduct看起來像這樣(通過Fiddler2搶下):

POST http://localhost:59656/Cart/AddProduct HTTP/1.1 
Host: localhost:59656 
Origin: http://localhost:59656 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko Chrome/17.0.963.79 Safari/535.11 
Content-Type: application/json; charset=UTF-8 
Accept: text/html, */*; q=0.01 

{"Product":{"ID":1232, "Name":"Blu-Ray","Price":210}} 

爲什麼product.Price零,而其他道具erties(ID和名稱)正確地保溼?

+0

檢查Request.Form集合,查找「Price」條目並查看提供的值是什麼。 – 2012-03-28 20:30:52

+4

請參閱http://stackoverflow.com/questions/5698984/default-asp-net-mvc-3-model-binder-doesnt-bind-decimal-propeties。 – DMulligan 2012-03-28 20:40:11

+0

該集合是空的。該請求不是網址編碼的,是JSon編碼的。我也發佈了HTTP頭,所以這很清楚。 – Diego 2012-03-28 20:44:32

回答

2

嘗試張貼: { 「產品」:{ 「ID」:1232, 「名」: 「藍光」, 「價格」:210.00}}

我認爲MVC不投/轉換從int到decimal,所以.0告訴它使用float/double/decimal進行水合。

+0

貝。愚蠢的微軟。我決定將我的變量切換到長數據類型,但它基本上是相同的修復。謝謝,亞歷克斯! – 2012-04-26 21:44:25

+1

@ChrisJaynes參見Phil Haacks博客文章,瞭解更好的修復方法。 http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – 2012-08-03 15:22:47

+1

這並不意味着很尖銳,但是如何編寫一個大的綁定函數比僅僅切換數據更好地解決問題鍵入要長?我是否冒着一些其他奇怪的行爲冒着長時間的危險? – 2012-08-03 16:27:44

相關問題