Aspnetcore: Как добавить параметры в представление?

Созданный на 11 сент. 2015  ·  3Комментарии  ·  Источник: dotnet/aspnetcore

У меня есть конечная точка Azure CDN из конфигурации, которую я пытаюсь сохранить в параметрах и внедрить в представления, где она будет использоваться. Я застрял... в документах .NET не показан код разметки для внедрения параметров представления, а сообщение Рика, похоже, не обновлено для бета-версии 7. Я использую dnx-coreclr-win-x64.1.0.0-beta7, и это приложение dnxcore50.

Модель

(Здесь запутались в передовых методах: это даже входит в модели?)

``` С#
пространство имен MyApp.Models
{
общедоступный класс AppOptions
{
общедоступная строка CDN {получить; задавать; }
}
}

#### Startup

``` c#
public class Startup
{
    public IConfiguration Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var configurationBuilder = new ConfigurationBuilder().AddEnvironmentVariables();
        Configuration = configurationBuilder.Build();
        Configuration["CDN"] = "az123456";
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOptions();
        services.Configure<AppOptions>(Configuration);
        services.AddSingleton(_ => Configuration);
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseErrorPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseErrorHandler("/error");
        }
        app.UseStaticFiles();
        app.UseMvcWithDefaultRoute();
    }
}

HomeКонтроллер

``` С#
открытый класс HomeController : Контроллер
{
общедоступный HomeController (IOptionsварианты доступа)
{
Параметры = параметры доступа. Параметры;
}

AppOptions Options { get; }

[Route("/error")]
public IActionResult Script() => File("/wwwroot/error.htm", "text/html");

[HttpGet]
public IActionResult Index()
{
    return View("index", Options);
}

}

#### Markup

If everything else above is ok, the markup part is unclear to me. How do I inject this?
- as a model with `<strong i="32">@model</strong> MyApp.Models.AppOptions`
- with inject `<strong i="33">@inject</strong> MyApp.Models.AppOptions AppOptions`
- is the problem with the reference in the `src=` ... how do I break the property lookup at the "CDN" before the period prior to "vo"?

``` html
<strong i="34">@inject</strong> MyApp.Models.AppOptions AppOptions
...
<body>
    <!-- Error (squiggles) on "AppOptions"  and complains it can't be found -->
    <img src="http://@{AppOptions.CDN}.vo.msecnd.net/container/image.png" alt="Image from CDN">
    <!-- Error (squiggles) on "vo" and complains its trying to lookup "vo" on the property -->
    <img src="http://@AppOptions.CDN.vo.msecnd.net/container/image.png" alt="Image from CDN">
</body>
...

... тот же результат, если я использую <strong i="37">@model</strong> MyApp.Models.AppOptions и @{Model.CDN}.vo... или @Model.CDN.vo... .

Самый полезный комментарий

Для всех остальных помните, что вы должны полностью квалифицировать интерфейс для внедрения.

<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor

Все 3 Комментарий

Поскольку IOptions — это тот, который находится в контейнере DI, вам потребуется <strong i="6">@inject</strong> IOptions<AppOptions> AppOptionsAccessor

Для волнистых линий Razor проблема заключается в том, что вы используете неправильные скобки:

<img src="http://@(AppOptionsAccessor.Options.CDN).vo.msecnd.net/container/image.png" alt="Image from CDN">

@pranavkm Ах! Попался. Спасибо.

Для всех остальных помните, что вы должны полностью квалифицировать интерфейс для внедрения.

<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor

Была ли эта страница полезной?
0 / 5 - 0 рейтинги