2013-01-12 50 views
2

我正在製作一個工具,其中一個人可以得到一個引號,然後發送自己的引號。報價製作正常,但發送電子郵件時,報價數據已損壞。
Quotation對象中的數據很好,除了Options陣列。當發送3個數組項時,Options數組保存3個項目,除了它們的名稱爲空且價格爲0未正確設置數組的MVC JSON對象

使用jQuery.post將引用發送到ASP.NET MVC 3。在C#

報價對象的樣子:

public class Quotation 
{ 
    public string Email { get; set; } 
    public string Product { get; set; } 
    public int Amount { get; set; } 
    public decimal BasePrice { get; set; } 
    public decimal SendPrice { get; set; } 
    public Option[] Options { get; set; } 
    public decimal Discount { get; set; } 
    public decimal SubTotal { get; set; } 
    public decimal TotalPrice { get; set; } 
} 
public class Option 
{ 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
} 

操作方法是這樣的:

[HttpPost] 
public JsonResult Offerte(Models.Quotation quotation) 
{ 
    // 
} 

jQuery的樣子:

$.post(baseUrl + "/api/Offerte/", jsonContent, function (data) { 
    alert(data.Message); 
}); 

的jsonContent對象的樣子:

{ 
    "Options":[ 
     { 
      "Name":"Extra pagina's (16)", 
      "Price":40 
     }, 
     { 
      "Name":"Papier Keuze", 
      "Price":30 
     }, 
     { 
      "Name":"Omslag", 
      "Price":29.950000000000003 
     } 
    ], 
    "Amount":"5", 
    "BasePrice":99.96000000000001, 
    "SubTotal":199.91000000000003, 
    "SendPrice":0, 
    "Discount":19.991, 
    "TotalPrice":179.91900000000004, 
    "Email":"[email protected]" 
} 

有誰知道爲什麼數組設置不正確?


編輯
如果我這個調試代碼添加到控制器:

using (var writer = System.IO.File.CreateText(Server.MapPath("~/App_Data/debug.txt"))) 
{ 
    writer.AutoFlush = true; 

    foreach (var key in Request.Form.AllKeys) 
    { 
     writer.WriteLine(key + ": " + Request.Form[key]); 
    } 
} 

選項[0] [名稱]:額外pagina的(52)
選項[0] [價格]:156
選項[1] [名稱]:Papier Keuze
選項[1] [價格]:68.4
個選項[2] [姓名]:Omslag
選項[2] [價格]:41.94
金額:6
BasePrice:149.91899999999998
小計:416.25899999999996
SendPrice:0
折扣:45.78848999999999
TotalPrice: 370.47051
電子郵件:[email protected]

這意味着數據也得到了控制,但仍選擇不被置權。而且我不想要一個簡單的解決方案,以後我會自己解析它,我想知道處理它的正確方法,以便MVC能夠處理它。

+0

「的報價發送到ASP.NET MVC 3使用jQuery。後「。爲什麼你有這個限制?你可以使用'jQuery.ajax'嗎? – nemesv

+0

看起來像在你的Quotation類中,你正在定義options數組來保存選項而不是對象。 – Derek

+0

或者您需要重寫set函數來解析每個選項對象,並專門設置Option對象的每個屬性。 – Derek

回答

2

如果您想要將JSON數據發送到ASP.NET MVC控制器操作,並且您想要當前模型綁定工作(例如在模型上綁定集合),則需要將contentType指定爲"aplication/json"

因爲隨着$.post你不能指定的contentType你需要使用$.ajax,你還需要JSON.stringify數據:

$.ajax({ 
    url: baseUrl + "/api/Offerte/", 
    type: 'POST', 
    data: JSON.stringify(jsonContent), 
    contentType: "application/json", 
    success: function (data) { 
     alert(data.Message); 
    } 
}); 
+0

如果.post()函數是內容類型,則爲第四個參數。使用'json'作爲該值將起作用 – Derek

+0

@Derek否第四個參數是[數據類型](http://api.jquery.com/jQuery.post/):'dataType 類型:字符串 數據類型預計從服務器。默認值:智能猜測(xml,json,script,text,html).'這與contentType不同。 – nemesv

+0

@nemesv客戶端不是問題。問題是MVC如何解析/讀取數據。正如你可以在我的問題中讀到的一切都收到罰款** EXCEPT陣列。 – SynerCoder