【问题标题】:Looks like binder for date works incorrect in asp.net mvc看起来日期的活页夹在 asp.net mvc 中不正确
【发布时间】:2012-04-02 13:19:00
【问题描述】:

我在 QueryString 中有 startdate,值为:3/1/2012

DateTime.Parse(Request.QueryString["startdate"]).Month 返回月份数:1

但在我的控制器中,我有操作 Index(DateTime startDate) 和 startDate.Month 返回 3

有人可以解释为什么日期绑定不能按预期工作吗?

顺便说一句,我在 web.config 中已经有了文化:

<globalization uiCulture="en-GB" culture="en-GB"/>

【问题讨论】:

    标签: asp.net asp.net-mvc data-binding


    【解决方案1】:

    默认模型绑定器总是在解析查询字符串值时使用 InvarianCulture,无论您在 web.config 中配置哪种文化。

    • GET => 不变文化
    • POST => 文化无关

    所以假设你有两个动作:

    [HttpGet]
    public ActionResult Foo(DateTime date)
    {
        ...
    }
    
    [HttpPost]
    public ActionResult Bar(DateTime date)
    {
        ...
    }
    

    当您调用 Foo 操作时,您应该始终使用不变文化来格式化查询字符串中的日期,而当您调用 Bar 操作并在 POST 正文负载中传递日期参数时,默认模型绑定器将使用在您的 web.config 中配置的文化。

    查看following blog post,其中包含更多详细信息。

    【讨论】:

    • 好的,但是为什么模型活页夹在月份属性中返回 3,即使我使用的是:dd/mm/yyyy ?
    • 因为在 InvariantCulture 中,短日期格式是 MM/dd/yyyy,正如我在回答中解释的那样,当您使用 GET 请求时,默认模型绑定器使用不变文化。
    • @msony 那么你有两个选择。更改它,以便将日期格式化为 Invariant Culture,或者编写自己的模型活页夹。
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2023-03-18
    • 2012-10-18
    • 2018-11-18
    • 1970-01-01
    • 2021-06-10
    • 2013-08-25
    相关资源
    最近更新 更多