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

问题描述:

我有一个视图同时显示学生,课程,主题。我有3个不同的控制器,每个控制器都有一个模型。MVC - 为单个视图调用多个控制器

我不想将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> 
    } 

看着你正在尝试做的,我会说AJAX是最好的办法。 MVC已经包含Jquery,所以我会推荐使用它。

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

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

VAR数据=新词典() data.Add( “科目”,RepositoryHelper.GetStudentList()) data.Add( “课程”,RepositoryHelper.GetCoursesList()) data.Add( “科目”, RepositoryHelper.GetSubjectsList()) return View(Data);

个人而言,我会去选择1

+0

感谢您的回复。我知道ajax的方式。我也排除了第二个选项。 我在看有没有什么方法可以从srever侧调用不同的控制器,并获得这个成果。 – Vijay 2011-03-28 07:47:08

我会让学生,课程和主题的局部视图,然后使用@Html.RenderAction("Subjects", "ABCController")

呈现不同部分

你应该换将模型转换为ViewModel类并创建继承该视图模型的视图。