c# - 如何在 ASP.NET MVC 中使用分部 View ?

标签 c# asp.net asp.net-mvc razor

我正在构建一个 ASP.NET MVC 应用程序并希望使用局部 View 来显示我的产品类别。这将是一个网上商店,在每个页面的菜单栏下方,我想显示另一个栏,其中包含所有产品类别。

我想为此使用局部 View 。目前在 ~/Views/Categories 中,我创建了局部 View _CategoriesHeader.cshtml。 (我通过在“创建新 View ”对话框中选择“局部 View ”来做到这一点,所以它实际上是一个局部 View )

_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())

我想知道这是否是使用需要模型的部分 View 的正确方法。现在它只是内联创建一个新的 DbContext 对象来获取所有类别,但我认为最好有一个模型。 但我不知道该怎么做。我做了一些事情,其中​​ CategoriesController.cs 有一个用于此部分 View 的方法,但这不起作用,因为包含 View 已经加载了自己的模型。

最佳答案

没有。您不应在 View 内执行任何 DAL 操作。实际上,我建议只使用 ifforeach 和类似语句。没有其他的。在您的 Controller 中准备您的数据并将其传入。

您应该将 new Webshop.DAL.ShopContext().Categories.ToList() 放入主视图中使用的模型中,并将其传递给局部 View 。

@Html.Partial("~/Views/Categories/_CategoriesHeader.cshtml", Model.Categories)

如果你想在列表中呈现数据,你可能需要一个foreach

如果你想对每个页面都这样做,你应该创建一个新的 Action ,并让该 Action 呈现,而不是局部 View 。 (该操作应调用局部 View )。该操作可以获取所需的信息并将其传递到 View 。

@Html.Action("CategoriesHeader")

关于c# - 如何在 ASP.NET MVC 中使用分部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148463/

相关文章:

asp.net-mvc - DNX 与 DNX 核心

c# - 每个站点所有打开的选项卡仅浏览器通知一次

asp.net - PreviousPage = 在跨页发布中为空

c# - 如何查看 asp.net api 中 ajax 调用请求的数据类型

c# - azure ad graph api不提取用户信息

c# - 捕获所有异常

c# - 如何在没有任何循环的情况下从列表中填充列表框

如果提交有一些代码,Jquery 验证不适用于提交

c# - 更改 App_Code 中的任何文件后 Visual Studio 挂起

c# - sqlite-net的通用方法