MVC - 为单个视图调用多个控制器

时间:2011-03-28 07:26:28

标签: asp.net-mvc asp.net-mvc-3 razor

我有一个视图,一次显示学生,课程,科目。我有3个不同的控制器,每个控制器都有一个模型。

我不想将3个不同的模型合并到一个模型中,然后进行单个控制器调用。相反,我想要3个不同的控制器并对这些控制器进行3次调用。如何实现这个目标?

public class ABCController : Controller
{
    public ActionResult Students()
    {
        return View(RepositoryHelper.GetStudentList());
    }

    public ActionResult Courses()
    {
        return View(RepositoryHelper.GetCoursesList());
    }

    public ActionResult Subjects()
    {
        return View(RepositoryHelper.GetSubjectsList());
    }
}

- 查看

 using (Html.BeginForm("GetData", "University", FormMethod.Post, new { id = "parameters" }))
    {
        @:<table>
            @:<tr><td>
               @Html.DropDownList("Students")
            @:</tr></td>
            @:<tr><td>
               @Html.DropDownList("Courses")
            @:</tr></td>
            @:<tr><td>
               @Html.DropDownList("Subjects")
            @:</tr></td>
        @:</table>
        @:<p><input type='submit' value='Submit></p>
    }

3 个答案:

答案 0 :(得分:3)

您应该将模型包装到ViewModel类中,并创建继承该视图模型的视图。

答案 1 :(得分:1)

我会为学生,课程和科目制作部分观点,然后使用@Html.RenderAction("Subjects", "ABCController")

渲染不同的部分

答案 2 :(得分:0)

看看你想做什么,我会说ajax是最好的方法。 MVC已经包含Jquery所以我建议使用它。

这样您就可以先为学生加载下拉列表(从控制器传递) 一旦用户选择了学生,您就可以加载Cources和科目。 这样,您可以更改控制器方法,以根据所选内容限制结果。

如果你想坚持自己的路线,我会在控制器上完成工作并动态创建模型。我会说你可以使用动态对象,但这不会从控制器传递到视图。要解决这个问题,你可以使用词典。

var data = new Dictionary() data.Add(“subject”,RepositoryHelper.GetStudentList()) data.Add(“Courses”,RepositoryHelper.GetCoursesList()) data.Add(“subject”,RepositoryHelper.GetSubjectsList()) return View(Data);

就个人而言,我会选择选项1。