2014-04-16 57 views
3

我已經設置了公司預計,該對象控制器被張貼到它:將複雜的JSON提交給MVC控制器。我如何命名嵌套對象?

public class PrintJob 
{ 
    public string BarTenderFile { get; set; } 
    public string PrinterName { get; set; } 
    public List<TagLabel> Queue { get; set; } 
} 

public class TagLabel 
{ 
    public string Season { get; set; } 
    public string STSStyle { get; set; } 
    public string VStyle { get; set; } 
    public string ColorCode { get; set; } 
    public int CODI { get; set; } 
    public string SizeDesc { get; set; } 
    public string StyleDesc { get; set; } 
    public string ColorDesc { get; set; } 
    public string Vendor { get; set; } 
    public int Qty { get; set; } 
    public long UPC { get; set; } 
    public double CurrRetail { get; set; } 
    public double OrigRetail { get; set; } 
    public string AvailableIn { get; set; } 
} 

我試圖使用JSON來表示我的目標是通過AJAX提交到我的控制器。它適用於PrintJob的頂級屬性,控制器可以看到BarTenderFilePrinterName屬性的值。問題是Queue。我的JavaScript看起來像這樣:

var queue = []; 

$('#queue tr').each(function() { 
    var tagLabel = $.parseJSON($(this).find('pre').text()); 
    queue.push(tagLabel); 
}); 

var data = { 
    "BarTenderFile": $('#btFile').val(), 
    "PrinterName": $('#printer').val(), 
    "Queue": queue 
} 

$.ajax({ 
    type: 'POST', 
    url: window.submitQueueUrl, 
    dataType: "application/json", 
    data: data, 
    success: function (returnVal) { 
     // Do success stuff 
    } 
}); 

的JSON每個Queue對象存儲隱藏<pre>標籤內的頁面上,格式化使每名在我TagLabel對象名稱匹配。我認爲這比使用大量隱藏的輸入字段更容易。正在發送的JSON不會產生錯誤,後端代碼會毫無問題地對其進行摘要。問題是,當我將此提交給控制器時,Queueobject列表填充。最後的結果是,在我的控制器中,Queue將有我選擇的許多隊列項目,但每個隊列項目都由空值和零填充。如何告訴我的控制器識別每個隊列項目是TagLabel而不是通用對象?

+0

您還沒有發送JSON,改變'數據:''到的數據:JSON.stringify(數據),'。 'dataType'指定的響應類型不是你要發送的類型('contentType')。 – MrCode

+0

數據看起來不錯,但你可以發佈'tagLabel'的樣子嗎? –

+0

@MrCode/headdesk。當然就是這樣。把這作爲答案,我會標記它。謝謝! –

回答

6

擴展我的評論:數據沒有被編碼成JSON。 jQuery將嘗試從對象中構建正常的URL編碼數據(這解釋了爲什麼第一部分被接收)。

更改編碼的JSON:

$.ajax({ 
    data: JSON.stringify(data), 
    contentType : 'application/json' // also set the content type 
    ... 
}); 
相關問題