ASP.NET MVC - сопоставить FormData, содержащий массив, с классом модели - PullRequest
0 голосов
/ 11 июня 2019

На моем внешнем интерфейсе в настоящее время я создаю объект FormData, который содержит массив со следующими свойствами: «productName» и «productQuantity». Я смог отправить FormData на свою серверную часть. Однако я не мог связать какую-либо ценность Как правильно сопоставить список объектов в FormData с моим классом модели ASP.NET MVC на контроллере? Ниже мой текущий код:

Обновление Я все еще пытаюсь решить эту проблему, помощь очень ценится! Обновление2 Просто для ясности, я использую Vuejs в качестве клиентской среды

на стороне клиента

  const formData = new FormData();

  formData.append("Product[0].ProductName", "T-Shirt");
  formData.append("Product[0].Options.Quantity", "1");
  formData.append("Product[1].ProductName", "Shoe");
  formData.append("Product[1].Options.Quantity", "2");

На стороне сервера (контроллер)

    [HttpPost("verifyCart")]
    public async Task<IActionResult> verifyCart([FromForm] Product[] products)
    {
    }

На стороне сервера (модель)

public class Product
    {
        public string ProductName { get; set; }
        public List<Option> Options { get; set; }        
    }


public class Options
    {
        public int Quantity { get; set; } 
    }

1 Ответ

2 голосов
/ 11 июня 2019

Я могу заставить его работать, изменив данные формы с:

formData.append("Product[0].ProductName", "T-Shirt");
formData.append("Product[0].Options.Quantity", "1");
formData.append("Product[1].ProductName", "Shoe");
formData.append("Product[1].Options.Quantity", "2");

во множественном числе от "Product"

formData.append("Products[0].ProductName", "T-Shirt");
formData.append("Products[0].Options.Quantity", "1");
formData.append("Products[1].ProductName", "Shoe");
formData.append("Products[1].Options.Quantity", "2");

Поскольку параметр, который вы используете в действии публикации, это "products":

[HttpPost]
public IActionResult VerifyCart([FromForm] Product[] products)
{
}

Код на стороне клиента, который я использовал для проверки:

const formData = new FormData();

    formData.append("Products[0].ProductName", "T-Shirt");
    formData.append("Products[0].Options.Quantity", "1");
    formData.append("Products[1].ProductName", "Shoe");
    formData.append("Products[1].Options.Quantity", "2");

    $.ajax({
            type: "POST",
            url: '/Home/VerifyCart',
            data: formData,
            processData: false,
            contentType: false,
            success: function (data) {
            }
     });

Обновление

Я изменил код на стороне клиента, чтобы исправить проблему с количеством:

const formData = new FormData();

    formData.append("Products[0].ProductName", "T-Shirt");
    formData.append("Products[0].Options[0].Quantity", "1");
    formData.append("Products[1].ProductName", "Shoe");
    formData.append("Products[1].Options[0].Quantity", "2");

    $.ajax({
            type: "POST",
            url: '/Home/VerifyCart',
            data: formData,
            processData: false,
            contentType: false,
            success: function (data) {
            }
     });
...