Я все отладил и заметил, что вызывается конструктор валидатора (и не один раз, что странно).То есть моя фабрика IoC работает нормально.Пользовательская проверка с сервисными вызовами (правила с наборами правил) работает нормально (я отлаживал - звонки сделаны).Но стандартные правила валидации (свойство NotEmpty, Length, Matches и Must for Categories) не работают - нет ошибок валидации в объекте ModelState.
Это все работает рано, я не изменяю код, размещенный здесь.Никакие глобальные связующие модели не были изменены / добавлены.Понятия не имею.
Код для модели с нерабочей проверкой:
Мое сообщение:
[HttpPost]
public ActionResult CreateTest([CustomizeValidator(RuleSet = "New")] Test model)
{
if (ModelState.IsValid)
{
var testId = testService.CreateTest(model);
return RedirectToAction("Test", new { testId });
}
PrepareTestEdit(true);
return View("EditTest");
}
Моя модель:
[Validator(typeof(TestValidator))]
public class Test
{
public Test()
{
Categories = new List<string>();
}
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string UrlName { get; set; }
public List<string> Categories { get; set; }
}
Валидатор:
public class TestValidator : AbstractValidator<Test>
{
public TestValidator(ITestService testService)
{
RuleSet("Edit", () =>
{
RuleFor(x => x.Title).
Must((model, title) => testService.ValidateTitle(title, model.Id)).WithMessage("1");
RuleFor(x => x.UrlName).
Must((model, urlName) => testService.ValidateUrlName(urlName, model.Id)).WithMessage("2");
});
RuleSet("New", () =>
{
RuleFor(x => x.Title).
Must(title => testService.ValidateTitle(title)).WithMessage("3");
RuleFor(x => x.UrlName).
Must(urlName => testService.ValidateUrlName(urlName)).WithMessage("4");
});
RuleFor(x => x.Title).
NotEmpty().WithMessage("5").
Length(1, 100).WithMessage("6");
RuleFor(x => x.UrlName).
NotEmpty().WithMessage("7").
Length(1, 100).WithMessage("8").
Matches("^[-_a-zA-Z0-9]*$").WithMessage("9");
RuleFor(x => x.Description).
NotEmpty().WithMessage("10");
RuleFor(x => x.Categories).
Must(categories => categories != null && categories.Any()).WithMessage("11");
}
}