首页 > 解决方案 > 如何在ajax post请求asp.net core mvc razor中发送对象数组

问题描述

我正在尝试将对象数组发送到 web Api post ActionResult 方法

我的对象数组看起来像这样

model:[{"Status":"HOLD","MessageId":1},{"Status":"HOLD","MessageId":2}]

在 .cshtml 文件中发布来自前端的请求

    $.ajax({
        method: 'post',
        url: "Home/postMessage",
        data: JSON.stringify(model),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
           console.log(data)
        }
    });

web api 代码看起来像这样

PostStatus 模型

public class PostStatus
    {
        public string Status { get; set; }

        public int MessageId { get; set; }
    }

在控制器中发布请求代码

[HttpPost]
public ActionResult postMessage(PostStatus model)
{
    return  Json(new { data = model });
}

调试上述 web api 发布请求代码的片段

在此处输入图像描述

我无法找到导致问题的问题。

标签: jqueryasp.net-web-apirazorasp.net-coreasp.net-core-mvc

解决方案


从您的客户端代码中,您正在发送一个项目数组,但在您的服务器端操作方法中,您的操作方法参数是PostStatus类的单个对象。当表单提交时,默认模型绑定器将读取并解析提交的表单数据并尝试将其映射到您的参数对象属性值。由于您的参数类型和发布的数据是不同的类型,模型绑定器无法正确映射值。

您应该使用集合类型作为参数,模型绑定器将能够将发布的表单数据绑定到该参数。还使用属性装饰您的操作方法参数FromBody,该属性告诉模型绑定器从请求正文中读取数据。

[HttpPost]
public ActionResult postMessage([FromBody] IEnumerable<PostStatus> model)
{
    return Json(new { data = model });
}

推荐阅读