Ajax发布到ASP.net MVC控制器-对象属性为null

亚历克斯:

我有一个像这样构造的ajax帖子:

var myData = [
    {
        id: "a",
        name: "Name 1"
    },
    {
        id: "b",
        name: "Name 2"
    }
];

$.ajax({
    type: 'POST',
    url: '/myurl/myAction',
    data: { items: myData },
    dataType: 'json',
    error: function (err) {
        alert("error - " + err);
    }
});

和一个MVC控制器:

[HttpPost]
public JsonResult MyAction(MyClass[] items)
{

}

MyClass 只是数据的简单表示:

public class MyClass {
    public string Name {get; set; }
    public string Id {get; set; }
}

当JavaScript发出发布请求时,控制器动作确实确实接收到2个项目,但是这些项目中的属性(ID,名称)为null。

在提琴手中检查请求,正文如下所示:

Name                 | Value
items[0][Name]       | Name 1
items[0][Id]         | a
items[1][Name]       | Name 2
items[1][Id]         | b

我错过了什么吗?

达林·迪米特洛夫(Darin Dimitrov):

我错过了什么吗?

是的,请阅读以下文章,以了解默认模型绑定程序期望绑定集合的正确连线格式。换句话说,要使其工作,而不是:

items[0][Name]       | Name 1
items[0][Id]         | a
items[1][Name]       | Name 2
items[1][Id]         | b

您的有效载荷应该看起来像这样:

items[0].Name       | Name 1
items[0].Id         | a
items[1].Name       | Name 2
items[1].Id         | b

不幸的是,使用jQuery来实现此有效负载可能会非常令人沮丧。因此,如果要使用AJAX将复杂的对象/数组发送到服务器,我建议您使用JSON负载:

$.ajax({
    type: 'POST',
    url: '/myurl/myAction',
    data: JSON.stringify({ items: myData }),
    contentType: 'application/json',
    error: function (err) {
        alert("error - " + err);
    }
});

注意事项:

  • data: JSON.stringify({ items: myData }) 代替 data: { items: myData }
  • 添加 contentType: 'application/json'
  • 摆脱了 dataType: 'json'

现在您的负载看起来像这样:

{"items":[{"id":"a","name":"Name 1"},{"id":"b","name":"Name 2"}]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用ASP.NET Core和Jquery将对象从Ajax请求绑定到ASP MVC控制器

jQuery发布到控制器并重定向以查看MVC ASP.net

ASP.NET 5 / MVC 6 Ajax将模型发布到控制器

使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么?

如何使用AJAX将数据发布到ASP.NET MVC控制器?

AJAX发布到ASP.NET MVC 6控制器的操作方法和参数为null

将整个对象从视图传递到ASP.NET MVC 5中的控制器

Asp.net MVC 5-视图将空数据发布到控制器

AJAX发布数据到达ASP.NET Core 2.1.1控制器时为空

将对象从AngularJS传递到ASP.NET MVC控制器不起作用

将对象的集合从控制器传递到View Asp.Net MVC

ASP.Net MVC动态输入绑定到相同的控制器属性

使用ASP.NET MVC将表对象从视图传递到控制器

当发布到ASP.NET Core中的控制器时,所有值均为null

将表单发布到ASP.NET Core MVC中的控制器不起作用

使用ajax的控制器(ASP.Net MVC)中的输入值为空

.net核心3.1将对象的ajax列表发布到MVC控制器,没有数据到达

将数据从视图发布到ASP.Net MVC中的控制器

Asp.net MVC在其他控制器中采用了控制器的Disposable属性

ASP.NET MVC从同一控制器发布到控制器的操作

从ASP.NET MVC控制器构造函数访问时,IPrincipal属性为null

使用 superagent 将 ajax 发布到 ASP.NET MVC 端点,绑定到 IEnumerable<int> 属性

使用 angularjs 将 NULL 数据发布到 asp.net 核心控制器

Asp.net 核心 mvc ajax 发布到具有多个参数的控制器返回错误请求

Asp.Net MVC ajax 向控制器发送空对象?

将数据发布到控制器 Asp.Net Core MVC 时模型为空

从视图到控制器的 Ajax 请求正文在 ASP NET Core MVC 3 中为空

ASP.NET Core MVC 控制器从 ajax 调用接收输入参数为空

Ajax调用asp.net mvc 5控制器,参数返回null