【问题标题】:asp core - passing data to main layoutasp core - 将数据传递给主布局
【发布时间】:2018-06-14 03:55:54
【问题描述】:

我想将一些数据从数据库传递到主布局,我制作了一个名为_Nav的局部视图

@model IEnumerable<cms.Models.Page>

@foreach (var item in Model) {
<tr>
    <td>
        @item.Title
    </td>
</tr>
}

它住在views/home里面

HomeController 我有以下方法返回部分视图:

public IActionResult Pages()
        {
            return PartialView("_Nav", _context.Pages.ToList());
        }

但是如何在主布局文件中显示它(我认为在 mvc 5 中使用了 @Html.Action)?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您应该创建一个视图组件来呈现菜单。

    public class MenuViewComponent : ViewComponent
    {
        private readonly YourDbContext _context;
    
        public MenuViewComponent(YourDbContext context)
        {
            _context= context;
        }
    
        public async Task<IViewComponentResult> InvokeAsync()
        {
            var items = await db.Pages.ToListAsync();
            return View(items);
        }        
    }
    

    并在~/Shared/Components/Menu 目录中为名为@9​​87654322@ 的视图组件创建相应的剃须刀视图。您可以在那里使用现有的视图代码。

    @model List<Pages>
    <table>
    @foreach (var item in Model) {
    <tr>
        <td>
            @item.Title
        </td>
    </tr>
    }
    </table>
    

    现在你可以在你的布局中调用这个视图组件

    <div>
        @await Component.InvokeAsync("Menu")
    </div>
    

    您也可以使用标签助手样式语法调用此视图组件。首先添加您的~\Views\_ViewImports.cshtml 文件以使用您的程序集名称调用addTagHelper 方法,以便我们的自定义标签助手可以在整个项目中使用。

    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    @addTagHelper *, YourProjectsAssemblyName
    

    现在在布局中,

    <vc:menu ></vc:menu>
    

    【讨论】:

    • 我把这个类放在控制器文件夹中,它应该按照最佳实践去一个更好的地方吗?我应该创建一个 viewcomponents 文件夹还是类似的东西?
    • 这是一个主观问题。我个人将所有这些都保存在一个名为 Infrastructure/Components 的文件夹中。
    【解决方案2】:

    在 views/home/index.cshtml 文件中添加以下代码:

    @Html.Action("Pages", "Home")
    

    这将调用您的 Pages 方法,该方法将呈现 HTML 并将其返回到您的视图中。您走在正确的轨道上,但是将其放在 views/home/index.cshtml 文件中将有助于使您的项目更有条理。

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多