文化特定数据注释

时间:2013-09-10 20:49:39

标签: c# asp.net-mvc-4 data-annotations

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

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

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

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

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

如何修复此问题?我也可以减年,所以它只是“yy”而不是“yyyy”吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

    @using MvcApplication1.Models
    @model MyViewModel
    
    @Html.DisplayFor(x => x.Date)
    
  6. 现在强制将web.config中的文化强制转换为某种特定的文化:

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

    enter image description here

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

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

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

    enter image description here

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

    enter image description here

答案 1 :(得分:2)

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

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

修改

this answer,似乎 指示ASP.Net根据HTTP请求标头设置语言(设置web.config globalization - &gt;“文化“和”uiCulture“到”auto“)。