【问题标题】:How can I change the error message for implicitly required properties in a view model?如何更改视图模型中隐式必需属性的错误消息?
【发布时间】:2012-12-07 07:46:50
【问题描述】:

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

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

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

【问题讨论】:

  • @AliRızaAdıyahşi 该答案描述了全局消息更改。我只想为特定属性更改它。我已经更新了问题。
  • no 对于特定值,无法更改它。但是,您可以提供一个带有孔的格式字符串,用该字段的显示名称填充......看我的答案

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


【解决方案1】:

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

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

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

【讨论】:

  • 这是错误的!请看我的回答并尝试一下!
  • @Kirill,看来你是对的。这个问题已经打开了足够长的时间,并且我已经研究了足够长的时间,得出结论使用可为空的视图模型属性是唯一的解决方案。
【解决方案2】:

我已经开始在 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 团队已经涵盖了这一点。

【讨论】:

  • @ProfK 确切的消息是“开始需要日期字段”。如果您需要屏幕截图和我创建的测试解决方案,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2014-01-20
  • 2015-07-01
相关资源
最近更新 更多