如何在PartialView中创建模型的foreach循环? (MVC.NET)

时间:2017-03-24 15:41:44

标签: c# asp.net-mvc entity-framework

初学者的问题: 我的数据库中的2个表:产品,类别。我创建了一个产品视图。我有一个侧边栏菜单作为部分视图。

PartialView Name: _SidebarMenu
Layout Name:      _AdminLayout

我想动态列出_SidebarMenu中的类别。所以我在_SidebarMenu中尝试了这个:

@model IEnumerable<ProjectName.MVCWebUI.Models.Categories>

@foreach (var item in Model)
     {
        <li><a href="#">@item.CategoryName</a></li>
     }

但我遇到了服务器错误:

传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [ProjectName.MVCWebUI.Models.Products]',但此字典需要类型为'ProjectName.MVCWebUI的模型项.Areas.Admin.Models.AdminMenuContent”。

如何在渲染视图中列出不同的模型而不是模型?

2 个答案:

答案 0 :(得分:1)

我建议使用子动作,因为实际上不可能确保在每个视图中将正确的模型传递给部分动作。基本上,在您选择的控制器中,添加如下操作:

[ChildActionOnly]
public ActionResult SidebarMenu()
{
    // get categories from DB or whatever
    return PartialView("_SidebarMenu", categories);
}

然后,在您的布局中,将以下内容添加到您希望显示此菜单的位置:

@Html.Action("SidebarMenu", "Foo")

在哪里&#34; Foo&#34;是您将此操作置于其中的控制器的名称。

答案 1 :(得分:0)

假设您有一个类似的ViewModel:

public class IndexViewModel()
{
    public List<Product> Products { get; set; }
    public List<Category> Categories { get; set; }
}

主视图将包含:

@model IndexViewModel

部分会有:

@model List<Category>

因此,从主视图中,您可以呈现部分并传递正确的列表,如:

@Html.Partial("~/Areas/....your_partial_name.cshtml", Model.Categories)