如何使用ASP.NET MVC在单个ViewModel中验证多个单独的模型?

时间:2016-07-05 18:21:42

标签: c# asp.net asp.net-mvc validation asp.net-mvc-4

所以我有两个单独的模型:ModelAModelB。我还有一个ViewModel:TheViewModelTheViewModel包含ModelA以及ModelB的实例。

ModelAModelB拥有各自的属性和[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是否有效

2 个答案:

答案 0 :(得分:1)

你只需要传递vm来查看。模型绑定只发生在一个模型上。如果你想传递多个模型,你可以使用像ViewBag等动态对象......

.unscoped

然后你可以将View模型与View绑定。你给出的代码将不会运行返回View(vm.ModelAExample,vm.ModelBExample return View(vm); 这里会抛出语法错误

Best Practices ViewModel Validation in ASP.NET MVC

答案 1 :(得分:1)

这不会编译:

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

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

return View(vm)