asp.net mvc:默认模型绑定器问题
本文关键字:绑定 问题 模型 默认 net mvc asp | 更新日期: 2023-09-27 17:58:03
我有一个MVC 3视图,它显示了可以按日期筛选的项目列表。
过滤器是一个文本框,它已经被jQueryUI定义为一个日期选择器。
视图:
<%= 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
查询参数转换为可为null的DateTime(在此上下文中为null,表示所有日期或没有过滤器)。
然而事实并非如此。reportedDate
始终为空。我可以深入到Request.QueryString
并使用DateTime.TryParse
手动进行转换,这是我目前的工作,但我不明白为什么它一开始就失败了。
客户端和服务器之间的日期格式没有区别,还有其他数据类型(字符串和int)的其他(此处省略,但在实际代码中存在)过滤参数,它们可以毫无问题地得到处理。
为什么DateTime很麻烦,有什么建议吗?
Veli是对的。如果你想使用日期格式,你需要为你的DateTime定制一个模型活页夹。看看这里:
如何指定模型绑定的日期格式?
您可以使用将新路由添加到路由表中
routes.MapRoute(
"SearchRoute",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", reportedDate = UrlParameter.Optional}
);
那么你的url就会变成
MyController/Search/30-05-2011
这将使您的控制器动作捕捉到报告日期的值
但您必须更改日期选择器中使用的日期格式
好吧,问题是毕竟日期格式,看起来预期的日期格式字符串是mm/dd/yyyy
,而日期是以dd/mm/yyyy
形式出现的