我有一个控制器设置,希望收到以下提交的对象:
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
的顶层属性,这个方法很好用。控制器可以看到BarTenderFile
和PrinterName
属性的值。但是问题出现在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
}
});
每个`Queue`对象的JSON都存储在页面上隐藏的`
`标签中,格式化后每个名称与我的`TagLabel`对象中的名称相匹配。我想这比使用大量的隐藏输入字段要容易。发送的JSON生成没有错误,后端代码也可以正常处理。问题是当我将其提交给控制器时,`Queue`由一个`object`列表填充。最终结果是,在我的控制器中,`Queue`将有我选择的任意数量的队列项,但每个队列项都以null和零填充。如何告诉我的控制器识别每个队列项是TagLabel而不是通用对象?
data:
更改为data: JSON.stringify(data),
。另外,dataType
指定的是响应类型而不是你正在发送的类型(contentType
)。 - MrCodetagLabel
是什么样子的吗? - Erik Philips