3

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

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

我以为这会奏效。所以在美国它会显示 DD/MM/yyyy,而在欧洲它会显示 MM/DD/YYYY。

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

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

我该如何解决这个问题?我也可以把年度删减,所以它只是“yy”而不是“yyyy”吗?

4

2 回答 2

4

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

  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 中的文化强制为某种特定的文化:

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

在此处输入图像描述

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

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

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

在此处输入图像描述

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

在此处输入图像描述

于 2013-09-10T20:56:03.823 回答
2

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

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

编辑

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

于 2013-09-10T20:56:47.953 回答