我遇到验证错误的问题,该错误仅出现在Windows Azure上,但不出现在本地Azure模拟器上。
在我的模型中,我有一个具有属性“Start”的类和一个用于德语日期格式的DisplayFormat:
[Required]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Beginn")]
public DateTime Start { get; set; }
在我的本地计算机上,一切都很好,但是当我尝试在Windows Azure实例上保存字段时,我收到此验证消息:
值'22 .08.2011'对于Beginn无效。
(本地和云)使用相同的数据库(Azure SQL)。 所以,我很困惑。知道如何解决这个问题吗?
答案 0 :(得分:7)
DisplayFormat
属性(顾名思义)仅用于使用指定的格式显示属性值。它与验证完全无关。
在这种情况下,验证是在默认模型绑定器尝试将POSTed字符串设置为DateTime属性时执行的。它使用可以使用全球化元素在web.config
中指定的默认语言环境:
<system.web>
...
<globalization culture="de-DE" uiCulture="de-DE"/>
</system.web>
在Azure实例上部署代码时代码不起作用的原因是因为服务器可能配置为使用日期时间格式不同的en-US
文化。
如果您想使用更具体的格式,您还可以为视图模型编写自定义模型绑定器,并在内部使用此特殊自定义格式手动解析POSTed值。