所以我有两个单独的模型:ModelA
和ModelB
。我还有一个ViewModel:TheViewModel
。 TheViewModel
包含ModelA
以及ModelB
的实例。
ModelA
和ModelB
拥有各自的属性和[Required
] s。但是,当我发布表单时,TheViewModel
仅验证ModelA
并忽略ModelB
如何使用一个ViewModel验证多个模型?
一些代码段:
MODELA
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只会验证TheID
中的ModelA
属性是否有效,而TheCode
中的ModelB
是否有效
答案 0 :(得分:1)
你只需要传递vm来查看。模型绑定只发生在一个模型上。如果你想传递多个模型,你可以使用像ViewBag等动态对象......
.unscoped
然后你可以将View模型与View绑定。你给出的代码将不会运行返回View(vm.ModelAExample,vm.ModelBExample return View(vm);
这里会抛出语法错误
答案 1 :(得分:1)
这不会编译:
return View(vm.ModelAExample, vm.ModelBExample));
如果您使用vm作为ViewModel,验证将是正确的:
return View(vm)