2012-04-02 40 views
4

enter image description here看起来像粘合剂日期在asp.net mvc的工作不正确

我STARTDATE在查询字符串值为:2012/3/1

DateTime.Parse(的Request.QueryString [ “开始日期”]) .Month返回月份数:1

但在我的控制,我有行动指数(日期时间的startDate)和startDate.Month回报3

是任何人都可以解释为什么预期日期不工作的绑定?

顺便说一句,我必须培养在web.config中已经:

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

回答

6

默认的model binder 总是解析查询字符串值的时候,无论你在你的web.config配置它的文化使用InvarianCulture。

  • GET => InvariantCulture的
  • POST =>文化无关

因此,假如你有2个动作:

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

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

,当你调用美孚的动作,你应该总是使用不变的文化来格式化查询字符串中的日期,而当您调用Bar操作并在POST主体有效内容中传递date参数时,默认模型联编程序将使用文化在你的web.config中配置。

看看following blog post,它涵盖了更多细节。

+0

好的,但为什么模型绑定器返回3月属性,即使即时通讯使用:dd/mm/yyyy? – Sasha 2012-04-02 13:24:00

+1

因为在InvariantCulture中,短日期格式是'MM/dd/yyyy',正如我在回答中解释的那样,当您使用GET请求时,默认模型联编程序会使用不变的区域性。 – 2012-04-02 13:24:51

+0

但我需要的参数将在获取方法:http://tinyurl.com/bpc7jam – Sasha 2012-04-02 13:29:38

相关问题