哪个数据注释属性创建此验证属性?

Which Data Annotation attribute creates this validation attribute?

假设我们有这样一个模型:

public class TheViewModel
{
    public string DateTime? Image_Date { get; set; }
}

它被添加到 Razor 视图中,如下所示:

Html.TextBoxFor(model => model.Image_Date)

然后在浏览器中呈现如下:

<input data-val="true" data-val-date="The field Image_Date must be a date." id="Image_Date" name="Image_Date" type="text" value="" />

属性 data-val-date 是我感兴趣的。它显然是由 MVC 的 "unobtrusive" jQuery 验证集成注入的。

那么,什么数据注释会覆盖 HTML 属性中的措辞?

例如,[Required(ErrorMessage="This field is required!")] 将覆盖标准 "The field {0} is required." 消息。


失败的尝试:

  1. [DataType(DataType.Date, ErrorMessage = "Must be a valid date.")] 似乎没有对客户端验证做任何事情。

  2. [DisplayName("...")] 更改模式的通配符部分,但显然不会影响模式本身。

data-val-date 属性是由框架添加的,因为 属性 是 DateTime? 的类型。它是 HtmlHelper class 的 GetUnobtrusiveValidationAttributes() 方法,它实际上生成所有 data-val-* 属性。

请注意,[DataType(DataType.Date, "...")]EditorFor() 方法用来添加 type="date" 属性的属性,该属性又会生成浏览器 HTML-5 日期选择器(如果它浏览器支持),与客户端验证无关。

默认错误消息在资源文件中定义,您可以创建自己的错误消息来覆盖默认值。

App_GlobalResources 文件夹中创建(比如)MyResources.resx(您可能需要创建此文件夹)并添加以下 FieldMustBeDate 键和您的消息(默认消息是如下所示)

FieldMustBeDate : The field {0} must be a date

并在Global.asax

Application_Start()中添加以下内容
ClientDataTypeModelValidatorProvider.ResourceClassKey = "MyResources";
DefaultModelBinder.ResourceClassKey = "MyResources";

请注意,您还可以使用 PropertyValueRequired

覆盖 [Required] 属性的默认错误消息