文化特定数据注释

我正在尝试获取文化特定的数据注释。

[DisplayFormat(DataFormatString = "{0:d}")] public DateTime Date{ get; set; } 

我认为这会奏效。 因此,在美国,它将显示DD / MM / yyyy,在欧洲,它将显示MM / DD / YYYY。

为了测试这一点,我将默认的chrome语言设置为英语(UK)并重新启动浏览器。

我仍然在使用US格式,这让我相信我的DataFormatString不尊重文化。

我该怎么解决这个问题? 我还可以削减一年,所以它只是“yy”而不是“yyyy”吗?

这种格式是特定于文化的。 你一定做错了。

  1. 使用默认模板创建新的ASP.NET MVC应用程序
  2. 添加视图模型:

     public class MyViewModel { [DisplayFormat(DataFormatString = "{0:d}")] public DateTime Date { get; set; } } 
  3. 控制器:

     public class HomeController : Controller { public ActionResult Index() { return View(new MyViewModel { Date = DateTime.Now, }); } } 
  4. 一个观点:

     @using MvcApplication1.Models @model MyViewModel @Html.DisplayFor(x => x.Date) 

现在强制web.config中的文化到某些特定的文化:

   ...  

在此处输入图像描述

因此,请确保在这种情况下将文化设置为auto

   ...  

然后浏览器将发送正确的Accept-Language请求标头,如下所示:

在此处输入图像描述

显然结果将按预期格式化:

在此处输入图像描述

您必须实际设置当前文化,MVC框架不会自动设置它(请记住,页面的语言可能取决于URL等因素,而不仅仅是浏览器设置。

要设置区域性,请使用Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture 。 您可以从HttpRequest.UserLanguages获取浏览器设置(请记住,此值正是通过HTTP请求发出的值)。

编辑

根据这个答案 ,似乎有一种方法可以指示ASP.Net根据HTTP请求标头设置语言(将web.config全局 – >“culture”和“uiCulture”设置为“auto”)。