微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 将复杂的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; }
}

我正试图通过AJAX使用JSON提交给我的控制器来表示我的对象.它适用于PrintJob的顶级属性,控制器可以看到bartenderFile和PrinterName属性的值.问题是队列.我的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存储在隐藏的< pre>内.页面上的标签,格式化,以便每个名称与我的TagLabel对象中的名称匹配.我认为这比使用大量隐藏输入字段更容易.发送的JSON不会产生任何错误,后端代码会毫无问题地对其进行摘要.问题是当我将其提交给控制器时,Queue由对象列表填充.最终结果是,在我的控制器中,队列将有多个我选择的队列项,但每个队列项都由空值和零填充.如何告诉我的控制器识别每个队列项是TagLabel而不是通用对象?

解决方法:

扩展我的评论:数据未编码为JSON. jQuery将尝试从对象构建正常的URL编码数据(这解释了为什么收到第一部分).

更改为编码JSON:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐