如何在一个ViewModel中验证多个独立的模型.净MVC
本文关键字:独立 验证 MVC 模型 ViewModel 一个 | 更新日期: 2023-09-27 17:54:55
所以我有两个独立的模型:ModelA
和ModelB
。我也有一个ViewModel: TheViewModel
。TheViewModel
包含ModelA
和ModelB
的实例。
ModelA
和ModelB
有各自的属性和[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
属性无效时才会生效
你只需要传递vm给view。模型绑定只发生在一个模型上。如果你想传递多个模型在这种情况下,你必须使用动态对象,如ViewBag等.....
return View(vm);
然后你可以绑定视图模型与你的视图。您给出的代码将不会运行return View(vm)。ModelAExample vm。modelbeexample ));
在这里会抛出语法错误
无法编译:
return View(vm.ModelAExample, vm.ModelBExample));
如果你使用vm作为ViewModel,验证将是正确的:
return View(vm)