我从使用与我的主视图不同的模型的控制器返回局部视图时遇到问题。例如:
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)而不是第二种类型。
是否可以为视图及其局部视图返回不同类型? 谢谢你的回复。
答案 0 :(得分:5)
看起来你正在尝试渲染动作,而不是视图。
致电@Html.Action("Categories")
。
答案 1 :(得分:1)
使用部分视图时,只能使用
@Html.Partial("Categories", Model)
或具有您自己数据的特定模型
@Html.Partial("Categories", Model.Category)
答案 2 :(得分:0)
我只是了解局部视图的工作原理。实际上,在您和我的案例中,如果您认为可以在Categories()
操作中完成获取myanothermodel
的逻辑,则无需定义Index()
操作。
所以我在mymodel.myanothermodel
操作中分配了Index()
,然后在强类型Index.cshtml
中我使用了这个:(假设myanothermodel
是Categories
)< / p>
@{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>
这将为不同部门呈现具有不同外观的员工列表。