MVC C # Заполнение вложенных объектов AJAX JSON JQuery - PullRequest
0 голосов
/ 03 июня 2018

Я не могу заполнить вложенные объекты, когда отправляю Json с AJAX JQuery.

В частности, я не могу заполнить LineItems.

LineItems - это список объектов другого типа: это может быть веб-сайт или кампания, поэтому на своей серверной стороне я создал два класса (веб-сайт / кампания), которые наследуются от общего класса продукта.

Формат json - это то, что клиент отправляет мне по почте, поэтому я хочу выяснить, как автоматически (или нет) связывать мои объекты 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 Ответ

0 голосов
/ 03 июня 2018

Ваш 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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...