我正在尝试获取文化特定的数据注释。
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime Date{ get; set; }
我认为这会奏效。所以在美国它会显示DD / MM / yyyy,而在欧洲会显示MM / DD / YYYY。
为了测试这一点,我将默认的chrome语言设置为英语(UK)并重新启动浏览器。
我仍然在使用US格式,这让我相信我的DataFormatString不尊重文化。
如何修复此问题?我也可以减年,所以它只是“yy”而不是“yyyy”吗?
答案 0 :(得分:3)
此格式是特定于文化的。你一定做错了。
添加视图模型:
public class MyViewModel
{
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime Date { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
Date = DateTime.Now,
});
}
}
观点:
@using MvcApplication1.Models
@model MyViewModel
@Html.DisplayFor(x => x.Date)
现在强制将web.config中的文化强制转换为某种特定的文化:
<system.web>
<globalization culture="fr-FR"/>
...
</system.web>
因此,请确保在这种情况下将文化设置为自动:
<system.web>
<globalization culture="auto"/>
...
</system.web>
然后浏览器将发送正确的Accept-Language
请求标头,如下所示:
显然结果将按预期格式化:
答案 1 :(得分:2)
您必须实际设置当前文化,MVC框架不会自动设置它(请记住,页面的语言可能取决于URL等因素,而不仅仅是浏览器设置。
要设置文化,请使用Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.CurrentUICulture
。您可以从HttpRequest.UserLanguages
获取浏览器设置(请记住,此值正是HTTP请求中的内容)。
修改强>
每this answer,似乎 指示ASP.Net根据HTTP请求标头设置语言(设置web.config globalization - &gt;“文化“和”uiCulture“到”auto“)。