Как я могу проверить только одну модель с помощью ModelState.isValid

#c# #asp.net-mvc #modelstate #asp.net-core-5.0

Вопрос:

Я пытаюсь проверить только одну модель ModelState.IsValid один раз, после этого я хочу проверить другую модель, ModelState.IsValid и я хочу сделать все это одним действием. Позвольте мне показать вам, что я действительно хочу сделать ниже:

 [AllowAnonymous]
[HttpPost]
 public async Task<IActionResult> FillingInformation(Company company, Agency agency, List<IFormFile> files, Address address)
 {
   if (ModelState.IsValid("Company"))//if its possible
    {
        //.....
    }
    else if (ModelState.IsValid("Agency"))//if its possible
    {
        //.....
    }
    else if (ModelState.IsValid("Address"))//if its possible
    {
        //.....
    }
    else
    {
        //.....
    }
 }
 

Я уже искал и пытался применить его к своему коду , например, к таким вещам, как: GetFieldValidationState , ValidationState и Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState , но я просто не мог их хорошо применить.

Я попытался написать метод расширения, который проверяет ModelState.IsValid , но он по-прежнему проверяет обе модели, а не одну.

Комментарии:

1. Пожалуйста, ограничьте свои теги фактической структурой и версией, которую вы используете. Например, вы не можете одновременно использовать ASP.NET MVC 3 и ASP.NET MVC 4 и ASP.NET Ядро.

2. спасибо за предупреждение @HereticMonkey

Ответ №1:

я использую что-то вроде этого.

 try {
    var context = new ValidationContext(Company, serviceProvider: null, items: null);
    var results = new List<ValidationResult>();
    if (!Validator.TryValidateObject(Company, context, results, true))
        throw new Exception("Check Company info...");

    //validate all models
}
catch (Exception e) {
    ModelState.AddModelError("", e.Message);
    return View("your_view");
}