Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将GET请求中的复杂数据对象传递给MVC控制器操作_Asp.net Mvc_Query String_Modelbinder_Complex Data Types - Fatal编程技术网

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

Asp.net mvc 将GET请求中的复杂数据对象传递给MVC控制器操作,asp.net-mvc,query-string,modelbinder,complex-data-types,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

我的模型课如下:

  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; }
  }
[HttpGet] 
public ActionResult Index(HomeFilterModel filter) {
  return View(filter ?? new HomeFilterModel());
}
在客户端,收集的数据如下所示:

{
  "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
控制器操作如下所示:

  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; }
  }
[HttpGet] 
public ActionResult Index(HomeFilterModel filter) {
  return View(filter ?? new HomeFilterModel());
}
模型数据筛选器可以正确获取CompanyName和Country值,但Period.From和Period.To始终为空。我想知道我是否需要专门为这个模型类定制ModelBinder?或者我应该使用除$.param以外的其他函数在URL中构造查询字符串

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

?CompanyName=&Country=Canada&Period.from=2018-08-05T04%3A00%3A00.000Z&Period.to=2018-08-10T04%3A00%3A00.000Z
控制器操作可以正确获取所有数据。因此,默认模型绑定器不接受期间[from],而Period.from为


任何人都有最简单和最好的解决方案吗?

是的,
DefaultModelBinder
必须采用点符号格式(
&Period.from=xxx
)才能绑定它。绑定当前数据的唯一方法是发布并字符串化数据(使用
JSON.stringify()
),并设置
contentType:'application/JSON
选项,以便
DefaultModelBinder
用户JsonValueProviderFactory`进行绑定it@StephenMuecke谢谢你的评论。如果设置了内容类型,则Post请求没有问题。