文化特定数据注释
我正在尝试获取文化特定的数据注释。
[DisplayFormat(DataFormatString = "{0:d}")] public DateTime Date{ get; set; }
我认为这会奏效。 因此,在美国,它将显示DD / MM / yyyy,在欧洲,它将显示MM / DD / YYYY。
为了测试这一点,我将默认的chrome语言设置为英语(UK)并重新启动浏览器。
我仍然在使用US格式,这让我相信我的DataFormatString不尊重文化。
我该怎么解决这个问题? 我还可以削减一年,所以它只是“yy”而不是“yyyy”吗?
这种格式是特定于文化的。 你一定做错了。
- 使用默认模板创建新的ASP.NET MVC应用程序
-
添加视图模型:
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中的文化到某些特定的文化:
...
因此,请确保在这种情况下将文化设置为auto :
...
然后浏览器将发送正确的Accept-Language
请求标头,如下所示:
显然结果将按预期格式化:
您必须实际设置当前文化,MVC框架不会自动设置它(请记住,页面的语言可能取决于URL等因素,而不仅仅是浏览器设置。
要设置区域性,请使用Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.CurrentUICulture
。 您可以从HttpRequest.UserLanguages
获取浏览器设置(请记住,此值正是通过HTTP请求发出的值)。
编辑
根据这个答案 ,似乎有一种方法可以指示ASP.Net根据HTTP请求标头设置语言(将web.config全局 – >“culture”和“uiCulture”设置为“auto”)。