2011-03-28 68 views
0

我有一個視圖同時顯示學生,課程,主題。我有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> 
    } 

回答

0

看着你正在嘗試做的,我會說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

1

我會讓學生,課程和主題的局部視圖,然後使用@Html.RenderAction("Subjects", "ABCController")

呈現不同部分

3

你應該換將模型轉換爲ViewModel類並創建繼承該視圖模型的視圖。

相關問題