MVC3不显眼的验证不工作的自定义DataAnnotations属性
我有一个自定义属性,目前是DataAnnotations.RequiredAttribute(我会稍后扩展它,但只是试图让这个概念证明现在工作)的简单包装。但是,这不适用于MVC3不显眼的验证。MVC3不显眼的验证不工作的自定义DataAnnotations属性
这真是一个非常简单的问题。
这里是我的自定义属性:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
public RequiredAttribute()
{
}
public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
{
this.ErrorMessageResourceName = errorMessageResourceName;
this.ErrorMessageResourceType = errorMessageResourceType;
}
}
以下是使用自定义属性的两个模特属性,一个,一个使用DataAnnotations属性:
[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }
[CustomValidationAttributes.Required]
public string LastName { get; set; }
下面是剃刀代码:
<p>
@Html.TextBoxFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</p>
<p>
@Html.TextBoxFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</p>
这里是结果输出:
<p>
<input type="text" value="" name="FirstName id="FirstName" data-val-required="The First Name field is required." data-val="true">
<span data-valmsg-replace="true" data-valmsg-for="FirstName" class="field-validation-valid"></span>
</p>
<p>
<input type="text" value="" name="LastName" id="LastName">
<span data-valmsg-replace="true" data-valmsg-for="LastName" class="field-validation-valid"></span>
</p>
因此,大家可以看到,名字(使用DataAnnotations)呈现与所需验证必要的HTML属性,但姓氏(使用CustomValidationAttributes)缺少data-val-required
和data-val attributes
。
我做错了什么,或者这不支持与MVC3不显眼的验证?
在此先感谢。
正如ingo在评论中指出的那样,我最终不得不实施IClientValidatable
才能使这些工作成功。所以,在我上面的例子中,我不得不把它添加到我的属性:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "required"
};
yield return modelClientValidationRule;
}
我刚刚写了一篇关于创建自定义ValidationAttribute的博客,以及如何将其转换为不显眼的验证。该示例位于[github](https://github.com/jimschubert/ContainsAttributeExample)上,并与我制作的属性一起使用,这将需要您的字符串属性包含指定的单词或短语。你也可以使用'RequiredAttributeAdapter'注册你自定义的'RequiredAttribute' [见这里](https://github.com/jimschubert/ContainsAttributeExample/blob/master/ContainsUnobtrusiveExample/Global.asax.cs#L39) –
@JimSchubert你能链接到博客文章? –
@AnnL。该帖子在github页面的摘要中链接。这是,以防万一:http://www.ipreferjim.com/?p=606 –
你可以在这里找到http://*.com/questions/6495510/mvc-2-vs-mvc-3-您的解决方案custom-validation-attributes-using-dataannotationsmodelvalidatorpr – ingo
@ingo - 虽然我很困惑。如果我没有扩展基础验证,为什么我必须通过实现'IsValid'和'GetClientValidationRules'来“重新发明*”,如果这些实现已经存在并且适用于基本验证属性(在这种情况下为'RequiredAttribute')? –