Jquery 哪个数据注释属性创建此验证属性?
假设我们有这样一个模型:Jquery 哪个数据注释属性创建此验证属性?,jquery,asp.net-mvc,unobtrusive-validation,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
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}is Required.”消息
失败的尝试:
[DataType(DataType.Date,ErrorMessage=“必须是有效的日期。”)]
似乎对客户端验证没有任何作用[DisplayName(“…”)
更改模式的通配符部分,但显然不会影响模式本身框架添加了
data val date
属性,因为该属性的类型为DateTime?
。它是HtmlHelper
类的GetUnobtrusiveValidationAttributes()
方法,实际生成所有数据val-*
属性
请注意,[DataType(DataType.Date,“…”)
是EditorFor()
方法用于添加type=“Date”
属性的一个属性,该属性反过来生成浏览器HTML-5日期选择器(如果浏览器支持),并且与客户端验证无关
默认错误消息在资源文件中定义,您可以创建自己的错误消息来覆盖默认消息
在App\u GlobalResources
文件夹中创建(比如)一个MyResources.resx
(您可能需要创建此文件夹),并添加以下FieldMustBeDate
键和您的消息(默认消息如下所示)
并在Global.asax
ClientDataTypeModelValidatorProvider.ResourceClassKey = "MyResources";
DefaultModelBinder.ResourceClassKey = "MyResources";
注意:您还可以使用
PropertyValueRequired
键覆盖[Required]
属性的默认错误消息听起来您可能需要手动修复它,我将继续并标记此已回答,因为这似乎是正确的,但是,您能否说明如何找到字段mustBeDate
?它在(第445行)中定义并通过访问。(第97行)ASAIK,它们是您可以覆盖的4个默认值-FieldMustBeDate
,FieldMustBeNumeric
,PropertyValueInvalid
和PropertyValueRequired
覆盖默认的必需消息,我一点也不高兴。您对PropertyValueRequired
确定吗?@Kivin,几乎可以肯定,但我认为您需要在Global.asax
-DefaultModelBinder.ResourceClassKey=“MyResources”中增加一个设置因为PropertyValueInvalid
和PropertyValueRequired
在不同的命名空间中定义(System.ComponentModel.DataAnnotations
)。我目前正在休假,所以目前无法确认,但发现有更多信息
ClientDataTypeModelValidatorProvider.ResourceClassKey = "MyResources";
DefaultModelBinder.ResourceClassKey = "MyResources";