当前位置: 首页 > 面试题库 >

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

曾苗宣
2023-03-14
问题内容

我有一个像这样构造的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

我错过了什么吗?


问题答案:

我错过了什么吗?

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

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"}]}


 类似资料:
  • 我遵循了http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/将对象列表发布到我的Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。 我找到了一个答案,它说在WebDataBinder中设置setAuto就可以解决这个问题。所以在我的控制器中,我

  • 我有一个复选框的集合,每个复选框代表一个“产品”的顶部。我想传递一个修改的产品对象,勾选的浇头存储为selectedToppings。 我已经尝试了下面的代码,但不起作用。问题是我正在传递一个空的“product”对象,并且只存储复选框值(作为“selectedToppings”)。如何将“product”对象与“selectedToppings”一起传递? html(片段): 控制器: 实体:

  • 问题内容: 我有以下问题: 在按钮单击上,我将一些数据发布到服务器。我的控制器动作如下所示: MyViewModel如下所示: 而AJAX-Call则是以下的: 我已经尝试做的事情: 将dataType更改为’json’ 二手:传统:真 尝试var myEntries = JSON.stringify(…); 尝试var myEntries = {条目:[JSON.stringify({…}),J

  • 问题内容: 我试图实现对包含复杂对象作为参数的控制器操作方法的JQueryAJAX调用。我读了很多博客,并尝试了从中学习到的几种技巧。 我想触发一个异步发布,当用户在某个字段上制表符时调用该异步发布(不是表单保存发布–如我发现的其他示例所示)。 我的意图是: 在客户端上实例化一个对象(不是为View提供类型的ViewModel); 使用视图中多个字段中的数据填充对象; 将此对象转换为JSON; 使

  • 问题内容: 我一直在这里看问题:将MVCajaxjson发布到控制器操作方法,但不幸的是,它似乎并没有帮助我。我的几乎完全相同,除了我的方法签名(但是我已经尝试过了,但仍然没有被击中)。 jQuery的 控制者 但是,无论我尝试什么,我都不会受到打击。通过调试,我知道它发送了一个请求,每次都会得到一个错误。 问题答案: 您的操作需要字符串参数,但是您要发送一个复合对象。 您需要创建一个与您要发送的

  • 问题内容: 我有一个定义了POST处理程序的控制器,如下所示: 以JSON格式查看时,UIVendor对象如下所示: UIVendor bean具有一个ArrayList类型的名为“ Emails”的字段,带有适当的设置器和获取器(getEmails / setEmails)。NotificationEmail对象也具有适当的公共设置器/获取器。 当我尝试使用以下代码发布对象时: 我在日志中收到此