1
votes

Comment ajouter des paramètres de configuration dans la page de rasoir partagée _Layout.cshtml

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"));

    ...
}


0 commentaires

3 Réponses :


1
votes

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 :)


0 commentaires

8
votes

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 AppSettingsOptions

ou ajoutez @using Microsoft.Extensions.Options à _ViewImports.cs, puis injectez les options dans votre mise en page comme ceci:

@inject IOptions AppSettingsOptions .

après cela, vous pouvez accéder à vos paramètres tels que: @ AppSettingsOptions.Value.Version .


0 commentaires

1
votes

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"


0 commentaires