Пользовательская проверка aspnetboilerplate создает исключение - PullRequest
1 голос
/ 20 марта 2019

Я использую aspnetboilerplate framework в проекте .Net Core. У меня есть пользовательская проверка для моей модели представления, приведенная в официальной документации .

Сначала у меня есть простая модель представления с пользовательской проверкой:

    public class EditPropertyViewModel : ICustomValidate
    {
        public long Id { get; set; }

        public long? ParentId { get; set; }

        public string Title { get; set; }

        public void AddValidationErrors(CustomValidationContext context)
        {
            if (Id == ParentId)
                context.Results.Add(new ValidationResult("Property cannot be parent of itself!", new [] { "ParentId" } ));
        }    
    }

Тогда мой контроллер выглядит так:

        [HttpPost]
        public async Task<IActionResult> Edit(EditPropertyViewModel model)
        {
            if (ModelState.IsValid)
            {
                /* Update property here and return */
            }

            return View(model);
        }

Но когда я запускаю проект, возникает это исключение:

AbpValidationException: аргументы метода недопустимы! Подробности см. В ValidationErrors.

Это означает, что моя пользовательская проверка была выполнена до ModelState.IsValid, и нет никакой возможности обработать это исключение и показать пользователю удобное сообщение. Отключение проверки с помощью [DisableValidation] пропускает это исключение, но моя логика проверки также пропускается. Я также пытался использовать стандартный интерфейс IValidatableObject .NET вместо ICustomValidate от abp, но это не помогло мне решить проблему.

...