HTML.Partial - MVC 3 Razor

时间:2011-03-18 00:46:19

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

我从使用与我的主视图不同的模型的控制器返回局部视图时遇到问题。例如:

    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)而不是第二种类型。

是否可以为视图及其局部视图返回不同类型? 谢谢你的回复。

3 个答案:

答案 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中我使用了这个:(假设myanothermodelCategories)< / 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>

这将为不同部门呈现具​​有不同外观的员工列表。