MVC 3 AJAX后,名单充满了对象,但对象属性为空(MVC 3 AJAX Post, List

2019-06-23 13:13发布

我有以下问题:

上的一个按钮,点击我的一些数据发送到服务器。 我的控制器操作是这样的:

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的呼叫是follwing:

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

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

我已经尝试过的事情:

  • 更改数据类型为“JSON”
  • 使用:传统:真
  • 试图VAR myEntries = JSON.stringify(...);
  • 试图VAR myEntries = {项:[JSON.stringify({...}),JSON.stringify({...})]};
  • 与上面相同,但jQuery.param(...,真);
  • 使用的IEnumerable或MyViewModel [],而不是名单。
  • 上述的任意组合

我在做什么错在这里?

非常感谢你,非常喜欢您帮助我!

编辑

我(剃刀)查看是不是有趣的在这一刻,因为它无关任何事情。 我没有使用任何HTML.TextBoxFor(或similiar)的方法来填补myEntries变量。 它实际上是动态填充(因为有很多很多的条件)。 对于这个问题(和我自己的测试)的缘故,我硬编码的变量。 :)

Answer 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'
    });


Answer 2:

我得到了答案!

jQuery的有时可能造成混淆。

数据类型的参数,指定要取回从服务器上的内容。 的contentType是paremeter指定你发送到服务器。

所以从上面的例子中工作,如果你增加:

的contentType:“应用/ JSON; 字符集= UTF-8' ,

在AJAX调用。



Answer 3:

只是恭维如何创建将回发到控制器列表中的答案。 那是因为你不需要用列表的名称来包装阵列。 它看起来丑陋和无法管理使用内置的功能。 这个例子是这里展示如何回来后的JSON MVC会理解和解释为一个列表。 (但即使阵列被包裹它仍然有效,但是是静态内容和难以管理)

本例使用jQuery的排序插件。 我要发布整个列表模型回来的新订货指数在数据库中进行保存。

update: function (event, ui) {

 img = { key: 0, order: 0, url: '' }; //Single image model on server
 imgs = new Array(); //An array to hold the image models.

 //Iterate through all the List Items and build my model based on the data.
 $('#UploaderThumbnails li').each(function (e) {
      img.key = $(this).data('key');  //Primary Key
      img.order = $(this).index();  //Order index
      imgs.push(img); //put into "list" array
 });

 //And what is in the answer - this works really great
 $.ajax({
     url: '/Image/UpdateOrder',
     data: JSON.stringify(imgs),
     type: 'POST',
     contentType: 'application/json; charset=utf-8'
  });

}

而我的MVC控制器就是这么简单...

  [HttpPost]
  public ActionResult UpdateOrder(List<Models.Image> images)
  {
     //Images at this point is a proper C# List of Images! :) Easy!

      return Content("");
  }


文章来源: MVC 3 AJAX Post, List filled with Objects, but Objects Properties are Empty