初学者的问题: 我的数据库中的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”。
如何在渲染视图中列出不同的模型而不是模型?
答案 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)