如何在视图模型中更改隐式必需属性的错误消息?

时间:2012-11-29 09:49:21

标签: asp.net-mvc asp.net-mvc-4

我在视图模型中声明了属性,如:

    [Required(ErrorMessage = "The Date field is required for Start.")]
    [Display(Name = "Start")]
    public DateTime DateStart { get; set; }

但是,我仍然收到默认需要“开始”字段错误消息。我假设这是因为隐式需要不可为空的DateTime,并忽略Required属性。有没有办法为这些特定属性自定义我的错误消息,除了使它们可以为空?

2 个答案:

答案 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团队能够覆盖这一点。