【问题标题】:Asp.net MVC way to pass data to _layout.cshtml?Asp.net MVC 方式将数据传递给_layout.cshtml?
【发布时间】:2016-12-24 04:50:35
【问题描述】:

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

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

【问题讨论】:

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

标签: asp.net-mvc visual-studio-2015


【解决方案1】:

你有几种方法:


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

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


View Components 是 MVC Core 中最有趣的新功能(在我看来),它允许您创建 UI 小部件。

ViewComponent 的代码有点多(你需要创建控制器和视图),但它的功能很灵活(我喜欢它)并且很容易在你需要的地方调用,只是

@await Component.InvokeAsync("NameOfCOmponent").


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

@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
}

然后您可以在同一视图中使用@userInfo 来显示该信息。


更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多