如何将配置设置添加到 _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<AppSettings> AppSettingsOptions
或将@using Microsoft.Extensions.Options
添加到_ViewImports.cs,然后像这样在布局中注入选项:
@inject IOptions<AppSettings> 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 中:
<h1>@_config["Company:Name"]</h1>
【讨论】:
【参考方案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 页面的主要内容,如果未能解决你的问题,请参考以下文章
Razor 页面:从 _Layout.cshtml 设置 cookie
如何在 _layout.cshtml 中为不同区域动态渲染局部视图?
如何从 _Layout.cshtml 页面隐藏页面上的特定元素