我的应用程序在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)
如何解决该问题,以接受我的日期格式?
最佳答案
有一个带有默认模型活页夹的陷阱,很难理解,但是一旦知道了,就不会再犯同样的错误:
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/