【问题标题】:MVC Controller Action Object Parameter Receives Null Values from AJAX POSTMVC 控制器操作对象参数从 AJAX POST 接收空值
【发布时间】:2019-11-08 17:35:54
【问题描述】:

使用 AJAX 将包含数组值的对象发送到 MVC 控制器操作。断点显示 Action 已到达,但接收字符串数组的对象为空。

对 Asp.net MVC Web Api 的调用是使用 AJAX 进行的。创建对象,然后使用 JSON.Stringify。 MVC Action 参数对象设置为从 AJAX 调用接收值。我试过 [HttpPost] 属性以及 [Route("api/Controller")]。我也尝试过在 javascript 中将对象存储在另一个对象中。然后使用 JSON.stringify 然后将其设置为 ajax 'data' 参数。

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; }
    }

从 ajax 调用产生的 http 链接收到错误: 没有 MediaTypeFormatter 可用于从媒体类型为“application/octet-stream”的内容中读取“String[]”类型的对象。

总体预期结果是从 AJAX 调用接收参数。但是 Object 类保持为空。

更新

如下所示,Fetch 似乎有效。只是不确定为什么。

所以我发现 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
        });

【问题讨论】:

    标签: javascript asp.net ajax api model-view-controller


    【解决方案1】:

    您不需要对数据进行字符串化。由于您已经提供了dataType: "json" 选项,您可以直接按原样提供数据。

    试试这个 data: { employees:data }

    另外,请提供always 方法以进行进一步的故障排除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 2016-01-13
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 2019-08-13
      相关资源
      最近更新 更多