无法将“阵列类型查询”字符串解析为“对象列表”

时间:2017-01-04 12:46:58

标签: arrays asp.net-core-mvc custom-model-binder

我在ASP.net核心MVC 6应用程序中尝试一些分页和排序。但是当我传递数组时,查询字符串MVC动作无法将其解析为列表。

查询字符串如下所示:

  

取= 10安培;跳过= 0&安培;页= 1&安培;的pageSize = 10安培;排序%5B0%5D%5Bfield%5D =价格&安培;排序%5B0%5D%5Bdir%5D = ASC

它的模型如下:

enter image description here

这是我在服务器上获取的查询字符串: enter image description here

排序数组或列表的计数始终为0。 enter image description here

请你建议一个解决方法。它应该正确解析它,但不能解决问题。

2 个答案:

答案 0 :(得分:1)

您当前解码的查询字符串类似于

take=10&skip=0&page=1&pageSize=10&sort[0][field]=price&sort[0][dir]=asc

因此,请使用以下格式从客户端应用程序传递查询字符串参数

sort[0].field=price&sort[0].dir=asc

答案 1 :(得分:0)

有人可能有更好的答案,但如果是我,我会简化我的查询字符串并使模型变平。所以查询字符串可能是:

take=10&skip=0&page=1&pageSize=10&sortfield1=price&sortdir1=asc&sortfield2=otherfield&sortdir2=desc

然后在模型中将public List<Sort> Sort替换为展平属性:

 public string SortField1 {get; set;}
 public string SortDir1   {get; set;}
 public string SortField2 {get; set;}
 public string SortDir2   {get; set;}

您可以根据需要添加任意数量的这些展平属性。它不优雅,但它完成了工作。然后,如果您需要构建排序列表,则可以轻松地从这些属性构建它。