如何将配置设置添加到 _Layout.cshtml 共享 Razor 页面

Posted

技术标签:

【中文标题】如何将配置设置添加到 _Layout.cshtml 共享 Razor 页面【英文标题】:How to add configuration settings into _Layout.cshtml shared Razor page 【发布时间】:2019-06-19 22:13:46 【问题描述】:

我们有这个StartUp 如下从appsettings.json 获取值:

public Startup(IHostingEnvironment env)

    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.env.EnvironmentName.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    var environment = Configuration["ApplicationSettings:Environment"];


public void ConfigureServices(IServiceCollection services)

    services.Configure<AppSettings>(Configuration.GetSection("ApplicationSettings"));

    ...

而且我们的模型也叫AppSettings

public class AppSettings

    public string Environment  get; set; 
    public string Version  get; set; 

由于我正在处理 /Pages/Shared/_Layout.cshtml 尝试将此 版本 注入此共享页面,因此我无法执行代码背后的方法。那怎么注入呢?

更新 1 -

如果是页面模型,理论上我可以这样做:

public class _LayoutModel : PageModel

    private readonly AppSettings _appSettings;

    public string Version;
    public string Environment;

    public _LayoutModel(IOptions<AppSettings> appsettings)
    
        _appSettings = appsettings.Value;
    

    public void OnGet()
    
        Environment = _appSettings.Environment;
        Version = _appSettings.Version;
    

【问题讨论】:

【参考方案1】:

就像在控制器中一样,您也可以将服务注入到视图中。

你可以像这样使用@inject

@inject Microsoft.Extensions.Options.IOptions&lt;AppSettings&gt; AppSettingsOptions

或将@using Microsoft.Extensions.Options 添加到_ViewImports.cs,然后像这样在布局中注入选项:

@inject IOptions&lt;AppSettings&gt; AppSettingsOptions.

之后,您可以访问您的设置,例如:@AppSettingsOptions.Value.Version

【讨论】:

【参考方案2】:

为核心 3.1 添加 Hameed 的答案:

AppSettings.Json: "Company": "Name": "EvilCorp"

_ViewImports.cshtml: @using Microsoft.Extensions.Configuration

_Layout.cshtml: @inject IConfiguration _config

在 Razor html 中: &lt;h1&gt;@_config["Company:Name"]&lt;/h1&gt;

【讨论】:

【参考方案3】:

您可以使用 _layout.cshtml 文件中的 ViewData 访问您的设置。

在你的 _layout.cshtml 文件中

<title>Version : @ViewData["Version"] | Environment : @ViewData["Environment"]</title>

但是您必须在共享此布局的所有页面的 .cshtml 文件中设置 ViewData 的值,如下所示

@model YourPageModel
@
    ViewData["Environment"] = Model.Environment;
    ViewData["Version"] = Model.Version;
    Layout = "/Pages/Shared/_Layout.cshtml";

希望这会有所帮助:)

【讨论】:

以上是关于如何将配置设置添加到 _Layout.cshtml 共享 Razor 页面的主要内容,如果未能解决你的问题,请参考以下文章

根据控制器指定不同的_Layout.cshtml

Razor 页面:从 _Layout.cshtml 设置 cookie

如何在 _layout.cshtml 中为不同区域动态渲染局部视图?

如何从 _Layout.cshtml 页面隐藏页面上的特定元素

在 ASP.NET Core 中访问 _Layout.cshtml 中的 cookie

模型不会从剃刀页面中的 _Layout.cshtml 页面中的 _Footer.cshtml 部分视图绑定