将GET请求中的复杂数据对象传递给MVC控制器操作

时间:2018-08-09 14:37:50

标签: asp.net-mvc query-string modelbinder complex-data-types

我的模型课如下:

  public class HomeFilterModel {
    public string CompanyName { get; set; }
    public string Country { get; set; }
    public DateRange Period { get; set; }
  }

  public class DateRange {
    public DateTime? From { get; set; }
    public DateTime? To { get; set; }
  }

在客户端,收集的数据如下对象:

{
  "CompanyName":"",
  "Country":"Canada",
  "Period":{
            "from":"2018-08-05T04:00:00.000Z",
            "to":"2018-08-09T04:00:00.000Z"
           }
}

通过$ .param函数将其转换为查询字符串,然后添加到URL。

?CompanyName=&Country=Canada&Period%5Bfrom%5D=2018-08-05T04%3A00%3A00.000Z&Period%5Bto%5D=2018-08-10T04%3A00%3A00.000Z

控制器动作如下:

[HttpGet] 
public ActionResult Index(HomeFilterModel filter) {
  return View(filter ?? new HomeFilterModel());
}

模型数据过滤器可以正确获取CompanyName和Country值,但是Period.From和Period.To始终为NULL。我想知道是否需要为此模型类专门定制ModelBinder吗?还是我应该使用$ .param以外的其他函数来构造URL中的查询字符串?

已更新: 如果查询字符串更改为

?CompanyName=&Country=Canada&Period.from=2018-08-05T04%3A00%3A00.000Z&Period.to=2018-08-10T04%3A00%3A00.000Z

控制器动作可以正确获取所有数据。因此,Period [from]在默认的模型绑定器中是不可接受的,而Period.from是可接受的。

有人对此有最简单,最好的解决方案吗?

0 个答案:

没有答案