Nous avons ce StartUp
comme suit qui récupère les valeurs de appsettings.json
:
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; } }
Et nous avons également un modèle appelé AppSettings
public class AppSettings { public string Environment { get; set; } public string Version { get; set; } }
Alors que je travaille sur /Pages/Shared/_Layout.cshtml
, j'essaie d'injecter cette version dans cette page partagée, je ne pouvais pas faire le code derrière l'approche. Comment injecter ça alors?
MISES À JOUR 1 -
En théorie, je pourrais faire comme ça s'il s'agit d'un modèle de page:
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")); ... }
3 Réponses :
vous pouvez accéder à vos paramètres en utilisant ViewData dans votre fichier _layout.cshtml.
Dans votre fichier _layout.cshtml
@model YourPageModel @{ ViewData["Environment"] = Model.Environment; ViewData["Version"] = Model.Version; Layout = "/Pages/Shared/_Layout.cshtml"; }
Mais vous devez définir la valeur de ViewData dans le fichier .cshtml de toutes les pages, vous partagez cette mise en page comme ceci
<title>Version : @ViewData["Version"] | Environment : @ViewData["Environment"]</title>
J'espère que cela vous aidera :)
Comme dans le contrôleur, vous pouvez également injecter vos services dans la vue.
Vous pouvez utiliser @inject
comme ceci:
@inject Microsoft.Extensions.Options.IOptions
ou ajoutez @using Microsoft.Extensions.Options
à _ViewImports.cs, puis injectez les options dans votre mise en page comme ceci:
@inject IOptions
.
après cela, vous pouvez accéder à vos paramètres tels que: @ AppSettingsOptions.Value.Version
.
Ajout à la réponse de Hameed, pour Core 3.1:
AppSettings.Json:
{"Entreprise": {"Name": "EvilCorp"}}
_ViewImports.cshtml:
@using Microsoft.Extensions.Configuration
_Layout.cshtml:
@inject IConfiguration _config
dans le html Razor:
@_config["Compagnie:Nom"