【发布时间】:2011-10-22 18:12:45
【问题描述】:
我有一个自定义属性,它目前是 DataAnnotations.RequiredAttribute 的简单包装(稍后我将对其进行扩展,但现在只是试图让这个概念证明工作)。但是,这不适用于 MVC3 不显眼的验证。
这是一个非常简单的问题,真的。
这是我的自定义属性:
[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; }
这是 Razor 代码:
<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>
如您所见,FirstName(使用 DataAnnotations)使用验证器所需的必要 html 属性呈现,但 LastName(使用 CustomValidationAttributes)缺少 data-val-required 和 data-val attributes。
我做错了什么,还是 MVC3 不显眼的验证不支持?
提前致谢。
【问题讨论】:
-
你可以在这里找到你的解决方案stackoverflow.com/questions/6495510/…
-
@ingo - 不过我很困惑。如果我不扩展基本验证,为什么我必须通过实现
IsValid和GetClientValidationRules来“重新发明轮子”,如果这些实现已经存在并且适用于基本验证属性(在这种情况下为RequiredAttribute)?
标签: c# asp.net-mvc asp.net-mvc-3 data-annotations unobtrusive-validation