我在视图模型中声明了属性,如:
[Required(ErrorMessage = "The Date field is required for Start.")]
[Display(Name = "Start")]
public DateTime DateStart { get; set; }
但是,我仍然收到默认需要“开始”字段错误消息。我假设这是因为隐式需要不可为空的DateTime
,并忽略Required
属性。有没有办法为这些特定属性自定义我的错误消息,除了使它们可以为空?
答案 0 :(得分:2)
你是对的,你的问题是你的财产不可空。对于不可为空的属性,属性Required
是没有意义的。如果没有StartDate值,则验证不会转到Required
属性,并且在上一步中失败。如果你想获得ErrorMessage
,你应该
使用方法:
[Required(ErrorMessage = "The Date field is required for Start.")]
[Display(Name = "Start")]
public DateTime? DateStart { get; set; }
您无法为在模型绑定上获取null的不可变类型自定义ErrorMessage,因为它在MVC框架中是深层硬编码的。
答案 1 :(得分:0)
我开始在MVC 4中刷新新测试项目并创建测试模型
public class TestModel {
[Required(ErrorMessage = "The Date field is required for Start.")]
[Display(Name = "Start")]
public DateTime DateStart { get; set; }
}
然后在我的模型中,我就是这样:
@using(Html.BeginForm()){
@Html.ValidationMessageFor(a => a.DateStart);
@Html.TextBoxFor(a => a.DateStart)
<input type="submit" value="add"/>
}
当我删除文本框并点击提交时,我收到自定义的错误消息而不是默认消息。
The Date field is required for Start.
这对我来说很有意义,想象一下如果这是一个多语言应用程序,你肯定需要自定义该国家/地区的错误消息。火箭科学家不需要了解定制信息的需求。而且我希望MVC团队能够覆盖这一点。