4

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

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

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

4

2 回答 2

2

没错,您的问题是您的财产不可为空。对于不可为空的属性,属性Required是没有意义的。当没有 StartDate 值时,验证不会转到您的Required属性并在上一步失败。如果你想得到你的ErrorMessage,你应该使用:

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

您不能为在模型绑定时为空的不可空类型自定义 ErrorMessage,因为它在 MVC 框架中被硬编码。

于 2012-12-05T06:32:09.673 回答
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 团队已经涵盖了这一点。

于 2012-12-05T11:06:20.107 回答