Nullable DateTime参数在调用操作时永远不会绑定

时间:2010-09-20 16:46:41

标签: asp.net-mvc datetime

我有以下功能签名:

public JsonResult PopulateGrid(int page, Guid? accountId, Guid? systemUserId, Guid? branchId, DateTime? fromDate, DateTime? toDate, HomeVisitType? homeVisitType)

除了toDate之外,每个参数都绑定得很好,结果总是为空 检查Request.QueryString["toDate"]时,它会检索正确的值,即30/09/2010 似乎DateTime在绑定时需要另一种格式 什么是正确的格式?

1 个答案:

答案 0 :(得分:7)

对我的系统进行快速测试表明,它期望MM / DD / YYYY中的数据而不是DD / MM / YYYY,这可能是您遇到问题的原因。我的猜测是,如果你在fromDate上尝试相同的日期,你也会遇到同样的空问题。

我已将我的应用中的当前文化更改为使用DD / MM / YYYY的文化,但它似乎没有效果。似乎与使用10,01而不是10.01 ...

的语言的十进制相同

从ASP.Net团队的开发人员处更新。

这是故意的。任何属于URI的部分(请注意URI中的”统一“)都被解释为它来自不变文化。这是为了让美国用户复制一个链接并通过IM发送给英国的朋友可以确信他的朋友会看到完全相同的页面(例如,由于DateTime转换错误而导致的HTTP 500)。一般情况下,日期在RouteData或QueryString中传递的格式应为yyyy-mm-dd,以便在不同文化中明确

如果您需要以文化感知方式解释QueryString或RouteData参数,请将其作为字符串拉入,然后手动将其转换为所需类型,并传入所需的文化。 (DateTime.Parse具有允许您指定区域性的重载。)如果这样做,我建议还将所需的区域性作为QueryString或RouteData参数,以便URI的“Uniform”部分不会丢失,例如: URL看起来像......?culture = fr-fr& date = 01-10-1990。