我有一个MVC 3视图,显示可按日期过滤的项目列表。
过滤器是一个文本框,已经jQueryUI-fiied到日期选择器。
查看:
<%= Html.TextBoxFor(model => model.ReportedDate, new { @class = "datepicker" })%>
脚本:
$(".datepicker").datepicker({
dateFormat: 'dd/mm/yy',
changeYear: true,
changeMonth: true
});
单击按钮后,我会获取文本框的值并将其作为GET请求的查询字符串参数发送到我的控制器操作:
MyController/Search?reportedDate=30/05/2011
控制器操作:
public ActionResult Search(DateTime? reportedDate)
从此我希望默认模型绑定器将reportedDate
查询参数转换为可为空的DateTime(在此上下文中为null,表示所有日期或无过滤器)。
但事实并非如此。 reportedDate
始终为空。我可以深入Request.QueryString
并使用DateTime.TryParse
手动进行转换,这是我目前的工作,但我不明白为什么它首先失败了。
客户端和服务器之间的日期格式没有区别,并且还有其他(在此处省略但在实际代码中存在)其他数据类型(字符串和整数)的过滤器参数,并且它们处理没有问题。
为什么DateTime很麻烦?
答案 0 :(得分:3)
Veli是对的。如果要使用该日期格式,则需要为DateTime提供自定义模型绑定器。看看这里:
答案 1 :(得分:0)
是的,问题毕竟是日期格式,看起来预期的日期格式字符串是mm/dd/yyyy
,日期是dd/mm/yyyy
答案 2 :(得分:0)
您可以使用
向路由表添加新路由routes.MapRoute(
"SearchRoute",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", reportedDate = UrlParameter.Optional}
);
然后您的网址将变为
MyController/Search/30-05-2011
将使您的控制器操作捕获到reportedDate的值
但您必须使用日期选择器中使用的日期格式