父类作为参数并实现其派生类c# MVC
本文关键字:派生 MVC 实现 参数 父类 | 更新日期: 2023-09-27 18:13:25
我是MVC模式的新手,我想做这样的实现:
public ActionResult Create(PersonModel p)
{
if (ModelState.IsValid)
{
switch (p.PersonType)
{
case PersonType.Client:
return RedirectToAction("Index");
case PersonType.Employee:
return RedirectToAction("Index");
case PersonType.Lawyer:
return RedirectToAction("Index");
//return RedirectToAction("Create", "Lawyer",p);
}
return RedirectToAction("Index");
}
else
{
ViewBag.CourtBranches = new SelectList(courtBranch.GetAllCourtBranches(), "ID", "Name");
return View(person);
}
}
但是当我想在我的PersonsController中使用从"PersonModel"(一个抽象类)继承的类时,问题就开始了,因为VisualStudio理解有一个PersonModel而不是其他类。我怎么能对VS"撒谎"?在我的数据库中,person和它的每个继承都是一对一的关系。
重要的是要知道我有一个方法,通过从POST接收"PersonType"来实例化视图中选定的Person,并且它有效。因此,当我运行项目时,我接待的是律师、员工或客户。
是否有可能使用像return RedirectToAction("Create", "Lawyer",p);
这样的东西?但只是不显示视图中的任何东西,"直接访问到POST",如果我能让我的想法明白。
好吧,感谢所有阅读这篇文章的人。谢谢大家的回答:)
为什么不使用以下几个动作呢:
public ActionResult CreateEmployee(EmployeeModel model)
{
// ...
}
public ActionResult CreateLawyer(LawyerModel model)
{
// ...
}
当您想要在任何视图中显示Person时:
@Html.DisplayFor(m => m)
And in Views'Shared'DisplayTemplates'EmployeeModel.cshtml
@model EmployeeModel
@* specific layout for Employee *@
视图'共享' DisplayTemplates ' LawyerModel.cshtml
@model LawyerModel
@* specific layout for Lawyer *@