Публикация массива с помощью jQuery Ajax вызывает 500 (Внутренняя ошибка сервера) в MVC


У меня есть такой массив:

var nums=["21", "22", "23", "20", "19", "18"];

И этот Ajax-код jQuery:

 $('#chk').click(function () {

    $.ajax({
        url: "/BarberShop/ServiceUpdate",
        type: "Post",
        data:{ nums: nums},
        dataType: "json",
        success: function (data) {
        }
    });
});

И действие контроллера, подобное этому:

    [HttpPost]
    public ActionResult ServiceUpdate(string nums)
    {
      //Do something......
        return View();
    }

Проблема в том, что когда я публикую массив с помощью параметра ajax nums в действии контроллера null, а также сервер выдает мне эту ошибку:

СООБЩЕНИЕ http://localhost:18322/BarberShop/ServiceUpdate 500 (Внутренняя ошибка Сервера)

N.ajaxтранспорт.k.корс.а.междоменный.отправить @jquery-2.1.4.мин.js:4n.расширить.ajax @ jquery -2.1.4.мин.js:4 (анонимная функция) @Парикмахерская:481n.событие.отправка @jquery-2.1.4.мин.js:3n.событие.добавление.r.обработка @jquery-2.1.4.мин.js:3

Я перепробовал все ответы по этим ссылкам и некоторым другим:

500- внутренняя-серверная-ошибка-при-jquery-ajax-после-asp-net-mvc

Передать массив в ajax-запрос в ajax

Но все еще есть проблема. спасибо

Author: Community, 2015-05-22

1 answers

Значение равно нулю, потому что на стороне javascript вы используете массив.

var nums=["21", "22", "23", "20", "19", "18"];

Однако на стороне контроллера вы ожидаете строку.

public ActionResult ServiceUpdate(string nums)

Измените сторону контроллера на

public ActionResult ServiceUpdate(List<string> nums)

Кроме того, в настройках ajax убедитесь, что вы установили для traditional значение true

$.ajax({
        url: "/BarberShop/ServiceUpdate",
        type: "Post",
        data:{ nums: nums},
        dataType: "json",
        success: function (data) {
        },
        traditional: true
    });

См. Как я могу опубликовать массив строк в ASP.NET Контроллер MVC без формы?

Обновление

Причина, по которой вы должны использовать List<string>, связана с привязка параметров. Когда вы используете данные ajax в виде массива, связыватель внутренних параметров будет искать аналогичный тип/структуру в параметрах для привязки. Вот почему вы не можете привязать javascript Array к C# string.

 5
Author: AmmarCSE, 2017-05-23 12:00:32