Параметр объекта действия контроллера MVC получает нулевые значения от AJAX POST - PullRequest
0 голосов
/ 26 июня 2019

Использование AJAX для отправки объекта, включая значение массива, в действие контроллера MVC. Точка останова показывает, что действие достигнуто, но объект, получающий строковый массив, является нулевым.

Вызов на Asp.net MVC Web Api Вызов осуществляется с использованием AJAX. Объект создается, затем используется JSON.Stringify. Объект параметра действия MVC настроен на получение значений из вызова AJAX. Я пробовал атрибут [HttpPost], а также [Route ("api / Controller")]. Я также пытался в javascript, чтобы сохранить объект в другом объекте. Затем использовал JSON.stringify, а затем установите его в качестве параметра «данных» ajax.

Код JavaScript

        //var data = {
        //    Apimethod: null,
        //    Employees: [],
        //    Type: null
        //};
        var data = [];
        //var jsonData = JSON.stringify(data);

        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            url: "api/{controller}/" + data.Apimethod,
            data: { employees: data }
            //traditional: true
        }).done(function (response) {
            $('#modelmsg').empty();
            $('#modelmsg').append(response);
            return returnguid = response;
        }).fail(function (response) {
            console.log('Error: ' + response);
        });

WebApiConfig


            config.Routes.MapHttpRoute(
                name: "Name",
                routeTemplate: "api/{controller}/{action}/{employees}",
                defaults: new { action = "{name}", employees = RouteParameter.Optional }
            );

MVC Controller
```c#
[Route("api/{controller}/{employees}")]
        public IHttpActionResult InsertEmployeesIntoRDLTable(EmployeeList employees)
        {
                //Code Here
                return Json(response);
        }

Объект класса EmployeeList

    public class EmployeeList
    {
        public string Apimethod { get; set; }
        public string[] Employees { get; set; }
        public string Type { get; set; }
    }

Ошибка, полученная по http-ссылке, которая создается при вызове ajax: MediaTypeFormatter не доступен для чтения объекта типа 'String []' из содержимого с типом носителя 'application / octet-stream'.

Ожидаемый результат в целом - получение параметров от AJAX Call. Но класс Object остается нулевым.

Обновление

Извлечение, как показано ниже, похоже, работает. Просто не совсем уверен, почему.

Итак, я обнаружил, что fetch сделает эту работу. Я не уверен на 100%, почему, но это так.

        fetch(url, {
            method: "POST",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'credentials': 'include'
            },
            body: jsonData
        })
        .then(response => {
            return response.json();
        })
        .then(response => {
            //code
        })
        .catch(function (e) {
            //code
        });

1 Ответ

0 голосов
/ 26 июня 2019

Вам не нужно систематизировать данные.Поскольку вы уже указали опцию dataType: "json", вы можете напрямую предоставить данные как есть.

Попробуйте это data: { employees:data }

Кроме того, добавьте метод always для дальнейшего устранения неполадок.

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