繁体   English   中英

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

[英]How to validate multiple, separate models in a single ViewModel using ASP.NET MVC?

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

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

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

一些代码片段:

型号A

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

型号B

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

视图模型

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是有效的,而不是TheCodeModelB

您只需要传递vm即可查看。 模型绑定仅在一个模型上发生。如果要在这种情况下传递多个模型,则必须使用诸如ViewBag等的Dynamic对象。

 return View(vm);

然后,您可以将View模型与View绑定在一起。您给出的代码将不会运行返回View(vm.ModelAExample,vm.ModelBExample )); 在这里它将引发语法错误

ASP.NET MVC中的最佳实践ViewModel验证

这不会编译:

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

如果将vm用作ViewModel,则验证将是正确的:

return View(vm)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM