Windows Azure,EF和MVC3的验证问题

Ges*_*esh 6 c# entity-framework azure asp.net-mvc-3

我遇到验证错误的问题,该错误仅出现在Windows Azure上,但不出现在本地Azure模拟器上.

在我的模型中,我有一个具有属性"Start"的类和一个用于德语日期格式的DisplayFormat:

[Required]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Beginn")]
public DateTime Start { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的本地计算机上,一切都很好,但是当我尝试在Windows Azure实例上保存字段时,我得到以下验证消息:

值'22 .08.2011'对Beginn无效.

两者(本地和云)使用相同的数据库(Azure SQL).所以,我很困惑.知道如何解决这个问题吗?

Dar*_*rov 7

DisplayFormat属性(因为它顾名思义)仅用于使用指定的格式显示所述属性值.它与验证完全无关.

在这种情况下,验证由默认模型绑定程序在尝试将POSTed字符串设置为DateTime属性时执行.它使用可以在您web.config使用全球化元素中指定的默认语言环境:

<system.web>
    ...
    <globalization culture="de-DE" uiCulture="de-DE"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)

在Azure实例上部署代码时代码不起作用的原因是服务器配置为使用en-US日期时间格式不同的区域性的可能性.

如果您想使用更具体的格式,您还可以为视图模型编写自定义模型绑定器,并在内部使用此特殊自定义格式手动解析POSTed值.