.net DataAnnotation和Globalization问题(服务器端)

Che*_*ven 2 .net globalization server-side data-annotations

北美的日期格式为MM/dd/yyyy

我正在为澳大利亚的项目(asp.net MVC 2)工作,日期格式为d/MM/yyyy

在web.config我有

        <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-AU"
        uiCulture="en-AU"
        enableClientBasedCulture="true"
    />
Run Code Online (Sandbox Code Playgroud)

在视图.net中以正确的格式呈现日期 - "en-AU",但是当我在14/11/2011日期提交表单时,我的ModelState.IsValid等于False.

如何教授dataannoation以"en-AU"格式正确验证日期?

//更新

刚发现这个问题只与GET有关

using(Html.BeginForm("Search", "form", FormMethod.Post)) //Works
using(Html.BeginForm("Search", "form", FormMethod.Get)) //Does'n work
Run Code Online (Sandbox Code Playgroud)

**看起来它是一个.net bug !!!

我尝试了新的mvc2/3项目

当我使用GET时,mvc绑定不使用当前文化**

谢谢.

Haa*_*ked 6

此行为是设计使然.当您执行GET请求时,它会将日期放在URL中.ASP.NET MVC假设URL中的日期是不变文化.

为什么?

好吧,假设我创建了以下URL:/ posts/01-11-2011 /并将其发送给您.这对你来说代表着什么?

那么它意味着在2011年1月11日向我展示帖子,因为这对我的文化有用.但是您的文化可能表示为2011年11月1日.URL应该唯一标识资源.相同的网址不应具有不同的含义,具体取决于谁在查看它.

所以我们决定我们的模型绑定器不会将值从URL转换为当前文化,但转换表单帖子中的值.这对我们来说是有道理的,因为表格帖子不能被发送并且通常代表用户的输入.