Я работаю над веб-приложением MVC3, и моя Модель состоит из множества классов, которые используют пользовательский тип для текстовых свойств.
например, мой объект 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)
есть ли способ включить проверку для этих свойств 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-» не сгенерированы для их входных данных.
UPDATE:
мой клиентский скрипт:
$.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();
}
}
но все еще нет шансов.
спасибо