[英]asp.net mvc: default model binder problem
我有一個 MVC 3 視圖,它顯示可以按日期過濾的項目列表。
過濾器是一個文本框,它已經被 jQueryUI 填充到日期選擇器中。
看法:
<%= Html.TextBoxFor(model => model.ReportedDate, new { @class = "datepicker" })%>
腳本:
$(".datepicker").datepicker({
dateFormat: 'dd/mm/yy',
changeYear: true,
changeMonth: true
});
單擊按鈕后,我獲取文本框的值並將其作為 GET 請求的查詢字符串參數發送到我的 controller 操作:
MyController/Search?reportedDate=30/05/2011
Controller 動作:
public ActionResult Search(DateTime? reportedDate)
由此,我期望默認的 model 綁定器將reportedDate
日期查詢參數轉換為可為空的日期時間(在此上下文中為空,表示所有日期或無過濾器)。
然而,這種情況並非如此。 reportedDate
日期始終為 null。 我可以深入Request.QueryString
並使用DateTime.TryParse
手動進行轉換,這是我目前的工作,但我不明白為什么它首先會失敗。
客戶端和服務器之間的日期格式沒有區別,並且還有其他數據類型(字符串和 int)的其他過濾參數(此處省略,但在實際代碼中存在),它們可以毫無問題地處理。
有什么建議為什么 DateTime 很麻煩?
維利是對的。 如果您想使用該日期格式,您需要為您的日期時間定制 model 活頁夾。 看看這里:
對,問題畢竟是日期格式,看起來預期的日期格式字符串是mm/dd/yyyy
,而日期是dd/mm/yyyy
您可以使用向路由表添加新路由
routes.MapRoute(
"SearchRoute",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", reportedDate = UrlParameter.Optional}
);
那么您的 url 將變為
MyController/Search/30-05-2011
這將使您的 controller 操作捕獲報告日期的值
但您必須更改您在日期選擇器中使用的日期格式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.