如何在一个ViewModel中验证多个独立的模型.净MVC

本文关键字:独立 验证 MVC 模型 ViewModel 一个 | 更新日期: 2023-09-27 17:54:55

所以我有两个独立的模型:ModelAModelB。我也有一个ViewModel: TheViewModelTheViewModel包含ModelAModelB的实例。

ModelAModelB有各自的属性和[Required]s。但是,当我去发布表单时,TheViewModel只验证ModelA而忽略ModelB

我如何使用一个ViewModel验证多个模型?

一些代码片段:

模型

public class ModelA
{
    [Required]
    public string TheID { get; set; }
    public string TheName { get; set; }
}

ModelB

public class ModelB
{
    [Required]
    public string TheCode { get; set; }
    public string TheType { get; set; }
}

TheViewModel

public class TheViewModel
{
    public ModelA ModelAExample { get; set; }
    public ModelB ModelBExample { get; set; }
}
控制器

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(TheViewModel vm)
{
   if (ModelState.IsValid)
   {
      return RedirectToAction("Index", "Home");
   }
   return View(vm.ModelAExample, vm.ModelBExample));
}

ModelState只有在ModelA中的TheID属性有效,而ModelB中的TheCode属性无效时才会生效

如何在一个ViewModel中验证多个独立的模型.净MVC

你只需要传递vm给view。模型绑定只发生在一个模型上。如果你想传递多个模型在这种情况下,你必须使用动态对象,如ViewBag等.....

 return View(vm);

然后你可以绑定视图模型与你的视图。您给出的代码将不会运行return View(vm)。ModelAExample vm。modelbeexample ));在这里会抛出语法错误

ASP中视图模型验证的最佳实践净MVC

无法编译:

return View(vm.ModelAExample, vm.ModelBExample));

如果你使用vm作为ViewModel,验证将是正确的:

return View(vm)