В настоящее время я пытаюсь передать данные из AJAX в контроллер, однако модель всегда показывает пустой / count = 0.

Звонок AJAX:

$("#btnSubmit").click(function(e) {
    e.preventDefault();
    var _this = $(this);
    var url = _this.closest("form").attr("action");

    var rows = [];
    var items = $(".itemRow");

    $.each(items, function(i, item) {
      var tbOne = $(item).find("input[name='tbOne']").val();
      var tbTwo = $(item).find("input[name='tbTwo']").val();

      var row = {
        Test1: tbOne,
        Test2: tbTwo
      };
      rows.push(row);
    });

    //Let's post to server
    $.ajax({
        type: "POST",
        url: url,
        data: rows,
        contentType: "application/json"
      })
      .done(function(result) {
        //do something with the result
      })

  });
});

Модель:

public class Test
{
    public string Test1 {get; set;}
    public string Test2 {get; set;}
}

Контроллер:

[HttpPost]
public ActionResult Insert(<SomeOtherModel> otherModel, IEnumberable<Test> model){
       foreach (var item in model){
             //to do here
       }
}

Я не уверен, что мне не хватает ... Я пытался искать по другим сообщениям, и они сделали примерно то же самое, что и я. Но я просто не могу передать данные своему контроллеру ..

0
CodeName 15 Июн 2020 в 13:30

1 ответ

Лучший ответ

Во-первых, вы передали одну модель контроллеру, поэтому действие должно иметь только один параметр. Кроме того, ваш contentType равен "application/json", а ваши данные не являются данными json. Кроме того, если вы хотите передать данные json контроллеру, вы нужно использовать [FromBody].

Вот демоверсия сработала:

Контроллер:

    [HttpGet]
    public ActionResult Insert()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Insert([FromBody]IEnumerable<Test> model)
    {
        return View();
    }

Вид:

@{
    ViewData["Title"] = "Insert";
}

<h1>Insert</h1>
<button id="btnSubmit">submit</button>
@section scripts{ 
<script type="text/javascript">
    $("#btnSubmit").click(function () {

        var rows = new Array();
        var row = {};
        row.Test1 = "test1";
        row.Test2 = "test2";
        rows.push(row);
        var row1 = {};
        row1.Test1 = "test11";
        row1.Test2 = "test21";
        rows.push(row1);
        var model = JSON.stringify(rows);

        //Let's post to server
    $.ajax({
        type: "POST",
        url: "Insert",
        data: model,
        contentType: "application/json; charset=utf-8"
    });

});
</script>
}

Результат: введите описание изображения здесь

1
Yiyi You 16 Июн 2020 в 06:35