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

时间:2016-10-17 11:02:29

标签: c# asp.net-mvc inheritance abstract-class

我是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?在我的数据库中,我在人员与其每一个遗产之间建立了一对一的关系。

重要的是要知道我有一个方法通过从POST接收“PersonType”来实现View中所选Person的实例,并且它有效。因此,当我运行项目时,我会找到律师,员工或客户。

有可能使用像return RedirectToAction("Create", "Lawyer",p);这样的东西吗?但是,如果我能让我的想法明白,那就不要在视图中显示任何内容,“直接访问POST”。

好的,感谢读过这篇文章的所有人。要欣赏每一个答案:)

1 个答案:

答案 0 :(得分:0)

为什么不使用以下几项操作:

public ActionResult CreateEmployee(EmployeeModel model)
{
   // ...
}

public ActionResult CreateLawyer(LawyerModel model)
{
   // ...
}

在任何视图中,当您想要显示人物时:

@Html.DisplayFor(m => m)

在Views \ Shared \ DisplayTemplates \ EmployeeModel.cshtml

@model EmployeeModel
@* specific layout for Employee *@

视图\共享\ DisplayTemplates \ LawyerModel.cshtml

@model LawyerModel
@* specific layout for Lawyer *@