如何在MVC控制器中访问Javascript多维数组

我必须传递这样的filter数组:

脚本代码:

return { CustomFilter: options.filter.filters }; 

++++++++++++++++++++++++++++++++++++++++++++++++

来自Firebug:

 CustomFilter[0][field] ItemName CustomFilter[0][operator] startswith CustomFilter[0][value] testing Value CustomFilter[1][field] BrandName CustomFilter[1][operator] startswith CustomFilter[1][value] testing Value 1 

发布的值是: 在此处输入图像描述

但是我无法在Controller端收到这些。

我试过这样的:

 public ActionResult ReadOperation( string[][] CustomFilter) 

也像这样:

 public ActionResult ReadOperation( Filter[] CustomFilter) public class Filter { public string field { get; set; } public string @operator { get; set; } public string value { get; set; } } 

但没有奏效。 请建议。

尝试了模型方法

谢谢。


使用Json反序列化找到解决方案

脚本代码更改为:

  return { CustomFilter: JSON.stringify(CustomFilter) }; 

控制器代码更改为:

 using Newtonsoft.Json; public ActionResult ReadOperation(MyViewModel model) { var filters = JsonConvert.DeserializeObject(model.CustomFilter, typeof(CustomFilter[])); } public class MyViewModel { public string Filter { get; set; } public string group { get; set; } public int page { get; set; } public int pageSize { get; set; } public int sort { get; set; } } public class CustomFilter { public string field { get; set; } public string @operator { get; set; } public string value { get; set; } } 

控制器中的结果视图:

在此处输入图像描述

如果您使用的是ASP.NET MVC 4,并且无法更改参数名称,则可以通过以下方式定义自定义模型:

 public class MyViewModel { public Dictionary[] CustomerFilter { get; set; } public string filter { get; set; } public string group { get; set; } public int page { get; set; } public int pageSize { get; set; } public int sort { get; set; } } 

然后,在控制器:

 public ActionResult ReadOperation(MyViewModel model){ ... } 

似乎网格生成的参数中使用的符号用于字典 。 但是,没有尝试过字典集合。

它看起来像模型结构的错误。

 public class MyViewModel { public Filter[] CustomFilter { get; set; } public string Filter { get; set; } public string Group { get; set; } public int Page { get; set; } public int PageSize { get; set; } public int Sort { get; set; } } 

尝试将此类型用于模型绑定。

 public ActionResult ReadOperation(MyViewModel model) 

在post中,尝试按以下方式发送数据:

 CustomFilter[0].Field ItemName CustomFilter[0].Operator startswith CustomFilter[0].Value testing Value CustomFilter[1].Field BrandName CustomFilter[1].Operator startswith CustomFilter[1].Value testing Value 1 

在控制器:

 public ActionResult ReadOperation(Filter[] CustomFilter) 

Filter类定义为:

 public class Filter { public string Field { set; get; } public string Operator { set; get; } public string Value { set; get; } } 

(小心大写字母)。

或者如果你想使用模型方法,正如Ufuk建议的那样,并且具有相同的Filter类:

  • 模型:

     public class MyViewModel { public Filter[] CustomerFilter { get; set; } public string Filter { get; set; } public string Group { get; set; } public int Page { get; set; } public int PageSize { get; set; } public int Sort { get; set; } } 
  • POST中的参数:

     CustomFilter[0].Field ItemName CustomFilter[0].Operator startswith CustomFilter[0].Value testing Value CustomFilter[1].Field BrandName CustomFilter[1].Operator startswith CustomFilter[1].Value testing Value 1 Filter ItemName~startswith~'12'~and~BrandName~startswith~'123' Group Page 1 PageSize 15 Sort 
  • 调节器

     public ActionResult ReadOperation(MyViewModel model) 

请看这个链接: http : //haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/