一尘不染

MVC 3 AJAX发布,列表中填充了对象,但对象属性为空

ajax

我有以下问题:

在按钮单击上,我将一些数据发布到服务器。我的控制器动作如下所示:

public ActionResult Accept(List<MyViewModel> entries)
{
    //here entries HAS 2 MyViewModel-Instances in it.
    //The entries are not null, but the values of the instances are!
    //entries[0].ParamA is null
}

MyViewModel如下所示:

public class MyViewModel
{
    public string ParamA { get; set; }
    public string ParamB { get; set; }
}

而AJAX-Call则是以下的:

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };

$.ajax({
    type: 'POST',
    url: url,
    cache: false,
    data: myEntries,
    dataType: 'text' });

我已经尝试做的事情:

  • 将dataType更改为’json’
  • 二手:传统:真
  • 尝试var myEntries = JSON.stringify(…);
  • 尝试var myEntries = {条目:[JSON.stringify({…}),JSON.stringify({…})]};
  • 与上述相同,但使用jQuery.param(…,true);
  • 使用IEnumerable或MyViewModel []而不是列表。
  • 以上的任何组合

我在这里做错了什么?

非常非常感谢您对我的帮助!

编辑

我的(Razor)视图目前并不有趣,因为它与任何内容均无关。我没有使用任何HTML.TextBoxFor(或类似方法)来填充myEntries-
Variable。它实际上是动态填充的(因为有很多条件)。为了这个问题(和我自己的测试),我对变量进行了硬编码。:)


阅读 234

收藏
2020-07-26

共1个答案

一尘不染

通过您的回答和JSON.stringify方法的使用,它对我有用

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, 
                            { ParamA: "C", ParamB: "D" }] };

$.ajax({
        type: 'POST',
        url: '/{controller}/{action}',
        cache: false,
        data: JSON.stringify(myEntries),
        dataType: 'json', 
        contentType: 'application/json; charset=utf-8'
    });
2020-07-26