父类作为参数并实现其派生类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",如果我能让我的想法明白。

好吧,感谢所有阅读这篇文章的人。谢谢大家的回答:)

父类作为参数并实现其派生类c# MVC

为什么不使用以下几个动作呢:

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 *@