哪个Data Annotation属性创建此验证属性?

时间:2018-01-19 20:46:07

标签: jquery asp.net-mvc unobtrusive-validation

假设我们有这样的模型:

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的“不引人注目的”jQuery验证集成注入。

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

例如,[Required(ErrorMessage="This field is required!")]将覆盖标准“字段{0}是必需的”。消息。

尝试失败:

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

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

1 个答案:

答案 0 :(得分:3)

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

请注意,[DataType(DataType.Date, "...")]EditorFor()方法用于添加type="date"属性的属性,后者又生成浏览器HTML-5 datepicker(如果浏览器支持)和与客户端验证无关。

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

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

FieldMustBeDate : The field {0} must be a date

并在Application_Start()

Global.asax中添加以下内容
ClientDataTypeModelValidatorProvider.ResourceClassKey = "MyResources";
DefaultModelBinder.ResourceClassKey = "MyResources";

请注意,您还可以使用[Required]键覆盖PropertyValueRequired属性的默认错误消息