работя върху 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)
има ли начин да се активира проверка за тези TextRef свойства с помощта на DataAnnotations?
не намерих такива, така че създадох персонализиран атрибут на валидатора:
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();
}
}
но пак няма шанс.
Благодаря