代码之家  ›  专栏  ›  技术社区  ›  dev-chicco

MVC C填充嵌套对象ajaxjson JQuery

  •  1
  • dev-chicco  · 技术社区  · 7 年前

    特别是我不能填充行项目。

    LineItems是一个不同类型对象的列表:可以是website或campaign,因此我在服务器端创建了两个类(website/campaign),它们继承自一个通用产品类。

    json格式是客户机通过post发送给我的,所以我想弄清楚如何自动(或不)将c对象与接收到的json绑定起来。

    在控制器中,到目前为止,结果是用他自己的属性填充订单,但是LineItems的分支始终是没有值的产品。

    谢谢!

    模型

    public class Order
    {
        public string Partner { get; set; }
        public string OrderID { get; set; }
    
        public List<LineItems> LineItems { get; set; }
    }
    
    public class LineItems
    {
        public Product Product = new Product();
    }
    
    public class Product
    {
        public string ID { get; set; }
        public string Category { get; set; }
    }
    
    public class Website : Product
    {
        public WebsiteDetails WebsiteDetails = new WebsiteDetails();
    }
    
    public class WebsiteA : Website
    {
        public string ContactName { get; set; }
    }
    
    public class PaidSearch : Product
    {
        public Campaign Campaign = new Campaign();
    }
    
    public class Campaign
    {
        public string CampaignName { get; set; }
    }
    
    public class WebsiteDetails
    {
        public string TemplateId { get; set; }
        public string WebsiteBusinessName { get; set; }
    }
    

    控制器

    [HttpPost("rec-order")]
    public JsonResult Post([FromForm]Order order)
    {
        return Json(new { order = order });
    }
    

    JQUERY公司

    jQuery.ajax({
        url: "/api/rec-order",
        type: "POST",
        dataType: 'json',
        data: {
            "Partner": "TNT",
            "OrderID": "999888777",
            "LineItems": [
                {
                    "ID": 1,
                    "Category": "First Category Website",
                    "WebsiteDetails": {
                        "TemplateId": "12",
                        "WebsiteBusinessName": "Lorem Ipsum",
                    }
                },
                {
                    "ID": 1,
                    "Category": "First Category Campaign",
                    "Campaign": {
                        "CampaignName": "Lorem Ipsum",
                    }
                }
            ]
        },
        success: function (data) {
            console.log(data);
        }
    });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   D-Shih    7 年前

    LineItems int ID , string Category ... 属性,而不是对象。

    你可以试着用这个来代替你现在的模型

    public class WebsiteDetails
    {
        public string TemplateId { get; set; }
        public string WebsiteBusinessName { get; set; }
    }
    
    public class Campaign
    {
        public string CampaignName { get; set; }
    }
    
    public class LineItem
    {
        public int ID { get; set; }
        public string Category { get; set; }
        public WebsiteDetails WebsiteDetails { get; set; }
        public Campaign Campaign { get; set; }
    }
    
    public class Order
    {
        public string Partner { get; set; }
        public string OrderID { get; set; }
        public List<LineItem> LineItems { get; set; }
    }