我的应用程序在web.config中设置了pt-BR文化(日期为dd-mm-yyyy):

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="iso-8859-15" responseHeaderEncoding="utf-8" resourceProviderFactoryType="string" enableBestFitResponseEncoding="true" culture="pt-BR" uiCulture="pt-BR" />

在我的系统上创建的所有DateTime都是正确的格式,但是我创建了一个类似的 Controller 方法:
public ActionResult Test(DateTime date)
{
}

当日期采用葡萄牙语-br格式时,直接在浏览器中调用该方法将传递null,如下所示:
mysite/Test/?date=19/01/2012   => date = null in my controller

mysite/Test/?date=01/01/2012   => date is fine, but in US format (mm-dd-yyyy)

如何解决该问题,以接受我的日期格式?

最佳答案

有一个带有默认模型活页夹的陷阱,很难理解,但是一旦知道了,就不会再犯同样的错误:

  • 当您使用POST请求时,默认模型联编程序将使用您的区域性设置来解析日期。
  • 使用GET请求时,默认模型绑定(bind)程序使用CultureInfo.InvariantCulture解析日期,并忽略当前的区域性设置。

  • 由于您正在使用GET请求并将日期作为查询字符串参数传递,因此在url中发送时,应使用不变的区域性格式对它进行格式化。将日期格式化为查询字符串参数的正确方法是yyyy-MM-dd

    您可以看看following blog post,它有更多详细信息。

    关于asp.net-mvc-3 - 通过URL将DateTime传递给 Controller ​​会导致ASP .NET MVC 3(区域性)中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8910482/

    10-10 07:48