2011-03-18 151 views
0

我有問題從控制器返回與我的主視圖不同的模型的部分視圖。例如:HTML.Partial - MVC 3剃鬚刀

public ActionResult Index() 
    { 
     //myModel - get Some Types 
     return View(mymodel); 
    } 

    public PartialViewResult Categories() 
    { 
     //my another Model - get different Types 

     return PartialView(myanothermodel); 
    } 

然後在索引視圖:

@Html.RenderPartial("Categories")

我得到一個異常說,這是錯誤的類型。它期望第一種類型(mymodel)而不是第二種類型。

是否有可能返回不同類型的視圖及其部分視圖? 感謝您的回覆。

回答

5

它看起來像你試圖呈現動作,而不是視圖。

致電@Html.Action("Categories")

+0

謝謝!它的作品:) – jars 2011-03-18 00:55:16

+0

@jars:不客氣。你應該通過點擊空心支票來接受這個答案。 – SLaks 2011-03-18 01:14:34

+0

爲什麼'@ Html.Action'?並且'PartialViewResult'是否需要更改爲'ActionResult'。似乎方式就像不使用局部視圖。 – CallMeLaNN 2011-03-18 02:34:38

0

我只是理解了一點點局部視圖的工作原理。實際上,在您和我的案例中,如果您認爲獲取myanothermodel的邏輯可以在Index()操作中完成,則無需定義Categories()操作。

所以我分配在Index()行動mymodel.myanothermodel然後在強類型Index.cshtml我用這個:(假設myanothermodelCategories

@{Html.RenderPartial("Categories", Model.Categories);} 

或者:

@Html.Partial("Categories", Model.Categories) 

注意,始終使用爲了在.cshtml視圖中獲得最佳性能,請使用.RenderPartial()而不是.Partial()。我使用Model.Categories而不是mymodel.Categories,因爲強類型Index.cshtml已在文件的開頭已有@model mymodel

在我的實踐我有車型,如:

  • Model.Departments - IList<DepartmentModel>
  • Model.SelectedDepartment - DepartmentModel
  • Model.Employees - IList<EmployeeModel>

這是在使用:

@{Html.RenderPartial("DepartmentMenu", Model.Departments);} 

<div id="employeeViewContainner"> 
    @foreach (var emp in Model.Employees) 
    { 
     Html.RenderPartial("CardView" + Model.SelectedDepartments.Name, emp); 
    } 
</div> 

這將呈現不同部門的不同皮膚的員工列表。

1

當您使用管窺只使用

@Html.Partial("Categories", Model) 

或especific型號與自己的數據

@Html.Partial("Categories", Model.Category)