3

以下屏幕截图显示了我正在发送的数据(在 firefox 中显示为 firebug)。下面的代码然后显示了 ajax 方法调用的方法。在点击服务器端方法调用时正确填充了 Date 和 Id 属性,但我的数组(CustomerRequests 类型)里面没有值,但是帖子中的 CustomerRequests 的数量是正确的。

有任何想法吗?谢谢

在此处输入图像描述

我的控制器方法

   public ActionResult Show(Customers request)
   {
     .. 
     // Number of request.CustomerRequests is correct
     // Although request.CustomerRequests[0].Name == null ?? which is wrong

客户等级如下:

[DataContract]
public class Customers
{

    [DataMember]
    public CustomerRequests[] CustomerRequests{ get; set; }

    [DataMember]
    public DateTime Date { get; set; }  // I can see this value 

    [DataMember]
    public int Id{ get; set; }  // I can see this value

}



[DataContract]
public class CustomerRequests
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Expression { get; set; }
}

Javascript

 $('textarea').each(function () {

   var theName = 'The Name';
   var theExpression = 'The Expression';

   var obj = {
                'Name': theName,
                'Expression': theExpression
             };

   expressionArray.push(obj);

});  // close each


// val is the posted data

var val = {
             'Id': '1',                        
             'Date': '2013-10-10',
             'CustomerRequests': $.makeArray(expressionArray)
          };

我试过了,虽然没有用。

JSON.stringify({ Customers: val })
4

2 回答 2

1

毕竟,我们只需在content-type您的通话中添加一个并从data. 有点像

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

请注意:

  • 对 URL 进行硬编码是一种不好的做法。你应该使用@Url.Content("")或类似的东西
  • JSON.stringify可能不适用于较旧的浏览器。您可能需要添加此库: http: //www.json.org/js.html
于 2013-06-20T19:24:42.750 回答
1

虽然这不是一个完全正确的答案,因为我从未使用过内置的序列化程序,我可以建议您使用Json.NET库。我现在已经使用了很长时间了,我非常喜欢它。

至于你的问题,我会尝试使用List<T>而不是数组,我可能会尝试List在模型的构造函数中实例化。但老实说,这些只是猜测。

于 2013-06-20T17:56:21.383 回答