свободная проверка не работает - PullRequest
1 голос
/ 26 марта 2012

Я все отладил и заметил, что вызывается конструктор валидатора (и не один раз, что странно).То есть моя фабрика 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");
    }
}

1 Ответ

0 голосов
/ 04 апреля 2012

Свободная документация проверки

RuleSets позволяет группировать правила проверки, которые могут выполняться вместе, как группа, в то время как игнорируя другие правила

Я поместил все общие правила в отдельный приватный метод и вызвал его для обоих наборов правил в теле анонимной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...