Eri*_*itz 8 c# asp.net-mvc data-annotations asp.net-mvc-2
我有一个ExtendedAttribute的扩展类,它不会发回错误消息.如果我在调试器中检查它,文本就没问题了.
public class VierRequired : RequiredAttribute
{
public VierRequired(string controlName)
{
//...
}
public string VierErrorMessage
{
get { return ErrorMessage; }
set { ErrorMessage = value; }
}
// validate true if there is any data at all in the object
public override bool IsValid(object value)
{
if (value != null && !string.IsNullOrEmpty(value.ToString()))
return true;
return false; // base.IsValid(value);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它
[VierRequired("FirstName", VierErrorMessage = "Please enter your first name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
和mvc-view
<%: Html.TextBoxFor(model => model.FirstName, new { @class = "formField textBox" })%>
<%: Html.ValidationMessageFor(model => model.FirstName)%>
Run Code Online (Sandbox Code Playgroud)
如果我使用普通的必需注释,它可以工作
[Required(ErrorMessage = "Please enter your name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是自定义不会发回任何错误消息
Ben*_*ale 27
当我创建自己的衍生产品时,我也遇到了客户端验证的问题RequiredAttribute.要修复它,您需要注册您的数据注释,如下所示:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(VierRequired),
typeof(RequiredAttributeAdapter));
Run Code Online (Sandbox Code Playgroud)
只需在您的Application_Start()方法中调用此方法,客户端验证应该正常工作.
如果您在发布表单时属性不起作用,那么这将告诉我您的属性中的逻辑有问题(检查IsValid方法).我也不确定你想要用你的派生数据注释实现什么; 你的逻辑看起来像是试图完成默认属性所做的事情:
摘自MSDN文档:
如果属性为null,包含空字符串("")或仅包含空格字符,则会引发验证异常.