Многократное связывание (префикс = "...") в ASP.Net Core 3 MVC - PullRequest
0 голосов
/ 03 октября 2019

У меня есть приложение ASP.Net MVC 4, которое я портирую на ASP.Net Core 3.0 MVC.

Я пытаюсь перенести этот метод

[HttpPost]
public ActionResult DoSave(
  [Bind(Prefix = "new")]IEnumerable<C_Data> newItems,
  [Bind(Prefix = "updated")]IEnumerable<C_Data> updatedItems,
  [Bind(Prefix = "deleted")]IEnumerable<C_Data> deletedItems))
{
}

Всообщение AJAX (в JavaScript из веб-браузера) Я отправляю значения как JSON вот так

{
  "new[0].Id":3,
  "new[0].SID":"00000000-0000-0000-0000-000000000000",
  "new[0].Name":"asd"
}

Вот класс C_Data

public class C_Data
{
    [Key]
    public int Id { get; set; }

    public Guid SID { get; set; }

    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
}

Нотри параметра пусты при выполнении этого действия.

Вот ошибка, которую я получаю в ModelState

«Значение JSON не может быть преобразовано в C_Data»

Кто-нибудь может подсказать, как портировать этот метод?

Спасибо.

PD: Это действие выполняется в контроллере MVC, а не в API-контроллере.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Для Asp.Net Core существует два способа связывания модели: ModelBinding и JsonInputFormatter. Для отправки запроса через json он будет использовать JsonInputFormatter и Bind не будет работать.

В общем, я бы посоветовал вам попробовать вариант ниже:

  1. КонтроллерДействие

    [HttpPost]
    public ActionResult DoSave([FromBody]ItemModel itemModel)
    {
        return Ok("Worked");     
    }
    
  2. Модель

    public class ItemModel
    {
        public IEnumerable<C_Data> NewItems { get; set; }
        public IEnumerable<C_Data> UpdatedItems { get; set; }
        public IEnumerable<C_Data> DeletedItems { get; set; }
    
    }
    
  3. Запрос Json

    {
        "newItems":[{
            "Id":3,
            "SID":"00000000-0000-0000-0000-000000000000",
            "Name":"asd"
        }]
    }
    
0 голосов
/ 03 октября 2019

Вот ссылка , которая должна помочь.

Похоже, что вы должны быть в состоянии использовать объект C_Data, поместить его в массив и преобразовать его в строку при вызове AJAX, получить IEnumerable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...