哪个Data Annotation属性创建此validation属性?
假设我们有这样的模型:
public class TheViewModel { public string DateTime? Image_Date { get; set; } }
它被添加到Razor视图中,如下所示:
Html.TextBoxFor(model => model.Image_Date)
然后在浏览器中呈现以下内容:
属性data-val-date
是我感兴趣的。它显然是由MVC的“不引人注目的”jQueryvalidation集成注入的。
那么,哪些数据注释会覆盖HTML属性中的措辞?
例如, [Required(ErrorMessage="This field is required!")]
将覆盖标准“字段{0}是必需的”。 信息。
尝试失败:
-
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
似乎对客户端validation没有任何作用。 -
[DisplayName("...")]
更改模式的通配符部分,但显然不会影响模式本身。
data-val-date
属性是由框架添加的,因为该属性是DateTime?
类型DateTime?
。 它是HtmlHelper
类的GetUnobtrusiveValidationAttributes()
方法,它实际上生成所有data-val-*
属性。
请注意, [DataType(DataType.Date, "...")]
是EditorFor()
方法用于添加type="date"
属性的属性,该属性又生成浏览器HTML-5 datepicker(如果其支持的话)浏览器)并且与客户端validation无关。
默认错误消息在资源文件中定义,您可以创建自己的错误消息来覆盖默认值。
在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]
属性的默认错误消息