【问题标题】:Control dateformat when using Url.action or similar使用 Url.action 或类似内容时控制日期格式
【发布时间】:2015-06-04 08:04:19
【问题描述】:

我很清楚将日期放在查询字符串中的问题以及在这种情况下它们忽略任何全球化的方式。我在我的应用程序的大多数地方都使用标准的英国格式 dd/MM/yyyy - 我在我的 web.config 中设置了 <globalization uiCulture="en-GB" culture="en-GB" />,并且还使用了自定义 ModelBinder 来确保在使用英国格式时甚至可以解析发布的日期.抄袭自Melvyn Harbour - MVC ModelBinder and Localization

我已经阅读了许多帖子,建议在 URL 中传递日期时将格式设置为 yyyy-MM-dd,这听起来是一个不错的计划。问题是当我像这样调用 url.action 时如何设置:

urlHelper.Action(actionName, controllerName, FilteringOptions);

FilteringOptions 是一个包含DateTime 属性的类,因此:

public class FilteringOptions{
  public string SearchTerm{get;set;}
  public DateTime? FromDate{get;set;}
  public DateTime? ToDate{get;set;}
  public int? BrandID {get;set;}
  //...etc
}

我知道上面那个 Url.Action 调用中的最后一个参数,卡在RouteValueDictionary 中,而这里DateTime 属性变得不稳定,恢复为美国日期格式,而不是我所拥有的英国日期格式一直在处理 - 这当然会在解析一个不能双向工作的日期时崩溃,或者更糟糕的是,只是简单地交换日期和月份数字而不是造成其他混乱。

我很高兴使用 yyyy-mm-dd 格式传递日期,但如何确保使用该格式? - 无需遍历类中的所有属性并在日期属性上调用 ToString("yyyy-mm-dd")。

非常感谢任何帮助

【问题讨论】:

  • A DateTime 没有 any 隐式格式。它只有日期和时间值。 格式仅在您尝试获取其文本表示时才会出现问题。
  • 嗨,Soner,我明白了 - 但那我该怎么办。我需要在查询字符串中传递一个日期。为了做到这一点,我需要在过滤类中使用它。我怎样才能传递日期而不让它爆炸?
  • 我遇到了完全相同的问题,MVC 正在处理 GB 日期,但对 Url.Action 的调用会在查询字符串中生成美国日期。据我调查,RouteValues 超出了 MVC 范围并由 System.Web 处理,这不尊重您的文化。到目前为止,唯一的解决方案不是传递您的模型,而是传递具有相同属性的匿名类型,仅将日期传递给 ToString() - 正确的日期将最终出现在查询字符串中。

标签: c# asp.net-mvc datetime get asp.net-mvc-5


【解决方案1】:

您可以只更改系统日期格式,这将使其完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2016-11-11
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2013-03-28
    相关资源
    最近更新 更多