假设我们有这样的模型:
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验证集成注入。
例如,[Required(ErrorMessage="This field is required!")]
将覆盖标准“字段{0}是必需的”。消息。
尝试失败:
[DataType(DataType.Date, ErrorMessage = "Must be a valid date.")]
似乎没有对客户端验证做任何事情。
[DisplayName("...")]
更改了模式的通配符部分,但显然不会影响模式本身。
答案 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
属性的默认错误消息