我正在开发一个MVC3 webapp,我的模型包含许多使用自定义类型的文本属性的类。 例如我的Product实体看起来像:
public class Product
{
public int ProductId {get;set;}
public TextRef Title {get;set;}
public TextRef Description {get;set;}
}
和TextRef是:
public class TextRef
{
public int LangId {get;set;}
public string Text {get;set;}
}
所以在我的观点中我正在使用:
@Html.EditorFor(model => model.Title.Text)
@Html.ValidationMessageFor(model => model.Title.Text)
有没有办法使用DataAnnotations启用这些TextRef属性的验证?
我没找到,所以我创建了一个自定义验证器属性:
public class TextRefRequiredAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value is TextRef)
return !string.IsNullOrEmpty(((TextRef)value).Text);
else
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ValidationType = "textref";
yield return rule;
}
}
现在服务器端验证正在运行,但客户端验证不正常。事实上,没有为他们的输入生成“data-val-”属性。
更新
我的客户端脚本是:
$.validator.addMethod("textref", function (value, element, param) {
return (value != "");
});
$.validator.unobtrusive.adapters.addBool("textref");
我也尝试过使用FluentValidation:
public class CategoryValidator : AbstractValidator<CategoryViewModel>
{
public CategoryValidator()
{
RuleFor(o => o.Title.Text)
.NotEmpty();
}
}
但仍然没有机会。
感谢
答案 0 :(得分:0)
该属性对我来说没问题。您需要在客户端注册自定义适配器,虽然看起来有点像这样。
<script type="text/javascript">
$(function () {
jQuery.validator.unobtrusive.adapters.addBool('textref');
});
</script>
上面会出现
@Html.EditorFor(model => model.Title.Text)
@Html.ValidationMessageFor(model => model.Title.Text)