代码之家  ›  专栏  ›  技术社区  ›  the_drow

在调用操作时从不绑定可为空的datetime参数

  •  3
  • the_drow  · 技术社区  · 14 年前

    我具有以下功能:

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

    除了 toDate 结果总是空的。
    当检查 Request.QueryString["toDate"] 重新计算正确值,即2010年9月30日。
    似乎datetime在绑定时需要另一种格式。
    正确的格式是什么?

    1 回复  |  直到 11 年前
        1
  •  7
  •   Buildstarted    14 年前

    我的系统上的一个快速测试表明,它期望的数据是mm/dd/yyyy,而不是dd/mm/yyyy,这可能就是您遇到问题的原因。我猜如果你在fromdate上尝试同一个日期,你也会有同样的空问题。

    我已将应用程序中的当前区域性更改为使用dd/mm/yyyy的区域性,但它似乎没有任何效果。对于使用10.01而不是10.01的语言来说,十进制似乎也有同样的问题。

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

    这是故意的。任何属于URI的内容(请注意,URI中的“uniform”)都会被解释为它来自不变的区域性。这是为了让在美国复制链接并通过即时消息将其发送给英国朋友的用户能够确信他的朋友将看到完全相同的页面(例如,由于日期时间转换错误,而不是HTTP 500)。 一般来说,在routedata或querystring中传递的日期的格式应为yy-mm-dd,以便跨文化明确。 .

    如果需要以区域性意识的方式解释querystring或routedata参数,请将其作为字符串拉入,然后手动将其转换为所需的类型,并传入所需的区域性。(datetime.parse具有允许您指定区域性的重载。)如果执行此操作,我还建议将所需的区域性作为querystring或routedata参数,这样就不会丢失uri的“uniform”部分,例如,URL将类似于…?文化=fr fr&date=01-10-1990。