Asp.net mvc Asp.net MVC将数据传递到_layout.cshtml的方法?

Asp.net mvc Asp.net MVC将数据传递到_layout.cshtml的方法?,asp.net-mvc,visual-studio-2015,Asp.net Mvc,Visual Studio 2015,我一直在读到,MVC将数据从控制器传递到视图的方法是通过ViewModel完成的,但是如何将数据传递到\u Layout.cshtml,比如页面标题、元描述、文章作者等呢 MVC传递此类数据的方式是什么?我应该只使用ViewBag吗?您有几种方法: 视袋 视图数据 注射(以下示例) ViewBag和ViewData非常容易使用,但并不总是很方便 有一个很大的优点-您可以在一个视图位置设置/读取它们,也可以在另一个视图位置读取它们-例如,您可以在主视图中设置它们,并在\u laout.cs

我一直在读到,MVC将数据从控制器传递到视图的方法是通过ViewModel完成的,但是如何将数据传递到
\u Layout.cshtml
,比如页面标题、元描述、文章作者等呢

MVC传递此类数据的方式是什么?我应该只使用ViewBag吗?

您有几种方法:

  • 视袋
  • 视图数据
  • 注射(以下示例)

ViewBagViewData非常容易使用,但并不总是很方便

有一个很大的优点-您可以在一个视图位置设置/读取它们,也可以在另一个视图位置读取它们-例如,您可以在主视图中设置它们,并在
\u laout.cshtml
中读取/显示它们


视图组件是MVC核心中最有趣的新功能(在我看来),它允许您创建UI小部件

ViewComponent的编码稍微多一些(您需要创建控制器和视图),但它是一个灵活的特性(我喜欢),在您需要它的地方很容易调用,只是

@await Component.InvokeAsync(“组件名称”)


注入不是我最喜欢的,但有时是usfull-例如,如果您想显示用户名,可以直接将以下代码放入布局/视图文件中:

@using System.Security.Claims
@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> userManager
@{
    var userInfo = ((await userManager?.GetUserAsync(User))?.xxx);
    // where 'xxx' is any property of ApplicationUser model
}
@使用System.Security.Claims
@使用Microsoft.AspNetCore.Identity
@注入用户管理器

  • 您可以使用ViewBag作为页面标题,是的。您还可以将其作为模型属性,并将Layout.cshtml文件绑定到该视图模型。您还可以使用会话数据。在这里你有很多选择ViewBag是最简单的。但是你也可以使用一个命令。@你问的是MVC5还是MVC核心??