Я использую 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, но это не помогло мне решить проблему.