【发布时间】:2015-03-19 15:18:52
【问题描述】:
我正在构建一个 ASP.NET MVC 应用程序并希望使用局部视图来显示我的产品类别。这将是一个网上商店,在每个页面上,在菜单栏下方,我想显示另一个包含所有产品类别的栏。
我想为此使用局部视图。目前在~/Views/Categories 我创建了部分视图_CategoriesHeader.cshtml。 (我是通过在“创建新视图”对话框中选择“局部视图”来实现的,所以它实际上是一个局部视图)
_CategoriesHeader.cshtml的内容如下:
@model IEnumerable<Webshop.Models.Category>
@{
Layout = null;
}
<ul>
@foreach (var category in Model)
{
<li>@Html.ActionLink(category.Name, "Category", "Categories", new { ID = category.CategoryID }, null)</li>
}
</ul>
现在在~/Views/Shared/_Layout.cshtml我添加了以下代码:
@Html.Partial("~/Views/Categories/_CategoriesHeader.cshtml", new Webshop.DAL.ShopContext().Categories.ToList())
我想知道这是否是使用需要模型的局部视图的正确方法。现在它只是内联创建了一个新的 DbContext 对象来获取所有类别,但我认为最好有一个模型。
但我不知道该怎么做。我做了一些事情,CategoriesController.cs 有这个局部视图的方法,但这不起作用,因为包含的视图已经加载了自己的模型。
【问题讨论】:
-
在视图中新建一个
DbContext违背了 MVC 模式。您应该将主视图的模型更改为包含视图的所有项目和任何部分的对象。 -
您是否有任何具体原因要将产品类别列为部分视图?
-
因为我希望它出现在这个 webapp 的每个页面上。有没有更好的办法?
标签: c# asp.net asp.net-mvc razor