簡體   English   中英

asp.net mvc: 默認model binder問題

[英]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 活頁夾。 看看這里:

如何為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM