文化特定的数据注释

3

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

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

我以为这样会起作用。因此在美国,它会显示DD/MM/yyyy,在欧洲,它会显示MM/DD/YYYY。

为了测试这个想法,我将我的默认Chrome语言设置为英语(英国),并重新启动了浏览器。

然而,我仍然得到的是美国的格式,这使我相信我的DataFormatString没有尊重文化差异。

我该如何解决这个问题?我能否截取年份,使其只显示“yy”而不是“yyyy”?

2个回答

4

这个格式是与文化相关的。你一定做错了什么。

  1. Create a new ASP.NET MVC application using the default template
  2. Add a view model:

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

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new MyViewModel
            {
                Date = DateTime.Now,
            });
        }
    }
    
  4. And a view:

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

现在在你的web.config中强制指定一种特定的文化:

<system.web>
    <globalization culture="fr-FR"/>
    ...
</system.web>

图片描述

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

<system.web>
    <globalization culture="auto"/>
    ...
</system.web>

然后浏览器将发送适当的Accept-Language请求头,其格式如下:

enter image description here

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

enter image description here


我在web.config中没有设置culture="auto"。谢谢! - Nate

2
你需要实际设置当前文化,MVC框架不会自动设置它(记住页面的语言可能取决于诸如URL等因素,而不仅仅是浏览器设置)。
要设置文化,请使用 Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture。您可以从 HttpRequest.UserLanguages 获取浏览器设置(请记住,此值只是通过HTTP请求传递的值)。 编辑 根据这个答案,似乎有一种方法可以指示ASP.Net根据HTTP请求头设置语言(在web.config全局化中设置“culture”和“uiCulture”为“auto”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接