【问题标题】:empty data in ajax call to mvc actionajax 调用 mvc 操作中的空数据
【发布时间】:2012-11-14 08:48:55
【问题描述】:

我正在使用 asp.net mvc。我有这个动作:

[HttpPost]
public ActionResult Create(MyData myData)
{
   .... // For some reason data is always empty. The attributes are all null
}

我的数据是:

public class MyData {
    public string prop1 {get;set;}
    public IEnumerable<int> prop2 {get;set;}
}

我这样称呼它:

   var specificData = { prop1: 'abc', prop2: [1,2,3] }

   $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/MyController/Create',
        data: { myData: specificData }, //data contains the same attributes as MyData class
        success: function (data, b,c,d) {
            alert("success!");
        },
        error: function (data, b, c, d) {
            alert('fail');
        }
    });

问题是在 Create 动作中,“data”变量被实例化了,但它的属性都是空的。我做错了吗?

更新
根据@Rory McCrossan 的说法,我使用data: specificData 而不是data: { myData: specificData } 来解决它。但现在我在不同的地方遇到了这个问题。与 MyData 类相关的序列化问题,因为现在我使用的是更复杂的类: 公共类人{ 公共字符串名称{get;set;} }

public class MyData {
    public string prop1 {get;set;}
    public IEnumerable<Person> prop2 {get;set;}
}

具体数据是:

var specificData = { prop1: 'abc', 
                     prop2:  [ 
                         {name:'a'},
                         {name:'b'},
                         {name:'c'}]
                   };

在动作中,myData.prop2.ElementAt(0).name 为空。 现在怎么了?

【问题讨论】:

  • 您能否发布您的data 变量的内容。此外,MyData 类的属性列表也会有所帮助。
  • 我认为问题是使用可变数据,请您更改一下
  • @Rory McCrossan:我更新了我的代码。

标签: javascript jquery asp.net asp.net-mvc-3


【解决方案1】:

创建要发送的 JS 对象时,您将属性包装在 myData 属性中,这不是必需的。试试这个:

$.ajax({
    data: specificData
    // other settins...
});

【讨论】:

  • 你确定吗?据我所知,如果网络服务需要 myData 参数,那么数据应该是 {myData:{/*data here*/}}。这与 mvc 有什么不同吗?
  • @Naor 我最初的想法不正确 - 我更新了我的答案。这应该适合你了。
  • 没错,这对我有用,但不适用于包含复杂数组的类。数组返回元素,但未填充元素。我更新了我的问题。怎么了?
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多