3

我是 MVC 的新手,所以如果有什么不合理的地方,我会提前道歉。

我有一个基类(比如说“Person”)和 2 个派生类(“Student”、“Professor”)。

我想为创建功能使用 1 个视图,部分视图包含学生或教授的创建表单。如果我添加一个参数,我可以检查它以确定要显示哪个局部视图。

但我的问题是:单击“创建”按钮时,如何确定正在创建哪个对象?

编辑(请忍受我,因为我刚刚创建了这些来说明问题)

人物类:

public class Person
{
    public string Gender { get; set; }
    public int ID { get; set; }
}

学生班级:

public class Student : Person
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public List<Course> Courses { get; set; }
}

教授班:

public class Professor : Person
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public double AnnualSalary { get; set; }
}

那么我的 Create 控制器如下所示:

public ActionResult Create(int personType)    //1=student, 2=professor
{
    var x = new {
            Student = new Student(),
            Professor = new Professor()
        };
    ViewBag.PersonType = personType;
    return View(x);
}

然后我的观点是这样的:

<div>
@if (ViewBag.PersonType == 1)
{
    @Html.Partial("CreateStudentPartialView", Model.Student)
}
else 
{
    @Html.Partial("CreateProfessorPartialView", Model.Professor)
}

所以,问题是,当在任一局部视图中单击“创建”按钮时,相关的创建操作会是什么样子?

[HttpPost()]
public ActionResult Create(....)    //What would I put as parameter(s)?
{
    //no idea what to do here, since I don't know what object is being passed in
    return RedirectToAction("Index");
}
4

1 回答 1

2

你最好的选择是在你的控制器中有多个 POST 操作。

因此,在部分视图的表单中,指定要点击的操作

@using (Html.BeginForm("CreateStudent", "Create")) {

@using (Html.BeginForm("CreateProfessor", "Create")) {

然后您的控制器将如下所示:

[HttpPost]
public ActionResult CreateStudent(Student student)  
{
    //access the properties with the dot operator on the student object
    //process the data
    return RedirectToAction("Index");
}

 [HttpPost]
 public ActionResult CreateProfessor(Professor professor)  
 {
     //access the properties with the dot operator on the professor object
     //process the data
     return RedirectToAction("Index");
 }
于 2013-01-28T19:19:09.973 回答