【问题标题】:How to add configuration settings into _Layout.cshtml shared Razor page如何将配置设置添加到 _Layout.cshtml 共享 Razor 页面
【发布时间】: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;
    }
}

【问题讨论】:

    标签: asp.net-core .net-core razor-pages


    【解决方案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";
        }
        

        希望这会有所帮助:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-18
          • 2011-01-25
          • 2023-02-08
          • 1970-01-01
          • 1970-01-01
          • 2020-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多