我正在开发一个 MVC3 webapp,我的模型包含许多使用自定义类型作为文本属性的类。例如我的产品实体看起来像:
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();
}
}
但仍然没有机会。
谢谢