当我使用UpdateModel或TryUpdateModel时,MVC框架足够聪明,可以知道您是否尝试将null传入值类型(例如,用户忘记填写所需的Birth Day字段).
不幸的是,我不知道如何覆盖默认消息"需要一个值".在总结中更有意义的事情("请输入您的出生日").
必须有一种方法可以做到这一点(没有编写过多的解决方法),但我找不到它.有帮助吗?
编辑
此外,我想这也是无效转换的问题,例如BirthDay ="Hello".
我正在使用DataAnnotations属性和ASP.Net MVC 2为我的ViewModel提供模型验证:
public class ExamplePersonViewModel {
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
[StringLength(128, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(Resources.Validation))]
[DataType(DataType.Text)]
public string Name { get; set; }
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
[DataType(DataType.Text)]
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这似乎按预期工作(尽管它非常冗长).我遇到的问题是,正在执行的幕后模型验证与任何特定属性无关.上述模型中的一个例子是该Age属性需要是一个int.如果您尝试在表单上输入非整数值,则会出现以下(非本地化)消息时出错:
字段Age必须是数字.
如何对这些非属性验证消息进行本地化?
是否有可用的这些消息的完整列表,以便我可以确保它们都已本地化?
我有一个完全本地化的网站,主要是法语/英语/德语.
现在,一切都很顺利,但我确实注意到asp.net MVC的一些错误消息的问题.
我的模型中有一个属性:
[Required]
[LocalizedDisplayName("PublicationDate", NameResourceType = typeof(LocalizationResources.Views.Composer.BaseInfoForm))]
public DateTime PublicationDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
LocalizedDisplayname是DisplayNameAttribute的扩展,它位于Resx文件中以获取正确的翻译
线程CurrentCulture和CurrentCultureUI在fr-FR中,因此消息应该以法语显示(就像我的[Required]属性一样,自动显示"Le champ Publication est requis").
但是在DateTime的情况下,如果我输入的东西不是日期,验证器只返回一个" The value 'asdfasdf' is not valid for Publication."所以:
非常感谢你
我已经通过指定读取了关于验证错误的本地化的答案DefaultModelBinder.ResourceClassKey,基本上是在int字段中输入字符串值时,或者在datetime字段中输入日期时间.
但是当我输入一个int字段的"111111111111111111111111111111"时,我得到System.OverflowException它看起来像"The value '{0}' is invalid.".
有没有办法以类似于其他MVC验证的方式本地化(将该消息转换为其他语言)验证错误?