Я написал шаблон T4, который автоматически генерирует все проверки следующим образом:
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(x => x.Email).NotEmpty();
RuleFor(x => x.Email).Length(0, 150).WithMessage("Email can not exceed 150 characters");
RuleFor(x => x.Password).NotEmpty();
RuleFor(x => x.Password).Length(0, 50).WithMessage("Password can not exceed 50 characters");
RuleFor(x => x.Name).NotEmpty();
RuleFor(x => x.Name).Length(0, 100).WithMessage("Name can not exceed 100 characters");
RuleFor(x => x.PhoneNumber).Length(0, 50).WithMessage("PhoneNumber can not exceed 50 characters");
RuleFor(x => x.Address).Length(0, 50).WithMessage("Address can not exceed 50 characters");
RuleFor(x => x.Postcode).Length(0, 50).WithMessage("Postcode can not exceed 50 characters");
RuleFor(x => x.City).Length(0, 50).WithMessage("City can not exceed 50 characters");
RuleFor(x => x.Country).Length(0, 100).WithMessage("Country can not exceed 100 characters");
RuleFor(x => x.UserRoleId).NotNull();
}
}
Теперь у меня есть ViewModel, где я хочу использовать эти проверки как таковые:
[Validator(typeof(UserValidator))]
public class RegisterModel
{
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
[Compare("Password"), Display(Name = "Confirm Password"), DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
public string Name { get; set; }
[Display(Name = "Phone Number")]
public string PhoneNumber { get; set; }
public string Address { get; set; }
public string Postcode { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
Мой класс отличается от того, что используется в AbstractValidator, у меня есть класс RegisterModel.
Когда я запускаю, я получаю следующую ошибку:
Невозможно привести объект типа «Web.Models.RegisterModel» к типу «DAL.User».
... что имеет смысл, поскольку это не тот же тип.
Я также пытался использовать этот способ:
public class RegisterModel
{
[Validator(typeof(UserValidator))]
public User UserDetails { get; set; }
[Compare("Password"), Display(Name = "Confirm Password"), DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
}
Но не может использоваться в этом, поскольку валидатор является атрибутом уровня класса, а не атрибутом свойства.
Можно ли каким-либо образом использовать в моделях существующие правила, созданные для моих классов сущностей?
Кто-нибудь пробовал что-то подобное? Или есть другие идеи на этот счет?