Следовательно, решение очень простое, просто измените порядок директив:

ющийэто руководство, я пытаюсь показать на странице ASP.NET Core 2.0 значения параметров.

В startup.cs я добавил несколько сервисов:

services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddOptions();
services.Configure<MyOptions>(Configuration);

где MyOptions определяется здесь:

namespace WebApplication1
{
    public class OptionsController : Controller
    {
        private readonly SubOptions _SubOptions;

        public OptionsController(IOptions<SubOptions> options)
        {
            _SubOptions = (SubOptions) options;
        }

        public IActionResult Index()
        {
            var RefreshTime = _SubOptions.RefreshTime;
            return Content($"RefreshTime = {RefreshTime}");
        }
    }

    public class MyOptions
    {
        public MyOptions()
        {
            SubOpt = new SubOptions();
        }

        public SubOptions SubOpt { get; set; }
    }

    public class SubOptions
    {
        public SubOptions()
        {
            RefreshTime = 5;
        }

        public int RefreshTime { get; set; }
    }
}

Пробуя из файла startup.cs, я могу получить доступ к настройке RefreshTime. Теперь я хочу сделать это прямо в cshtml:

@using Microsoft.Extensions.Options
@model MyOptions
@inject IOptions<MyOptions> Options
@page
@model AboutModel
@{
    ViewData["Title"] = "About";
}
<
<h3>@Model.Message</h3>
<br />
<div>
    <h3>Options</h3>
    <h4>Sub Options</h4>
    <p><b>Refresh time</b> @Options.Value.SubOptions.RefreshTime</p>
</div>

Страница не загружается, но я не вижу ошибок ни в консоли вывода VisualStudio, ни в браузере.

Кроме того, страница не загружается, даже если я просто поместил туда первую директиву @using, удалив все остальные параметры.

Затем я проверил, что у меня установлен этот пакет, и это выглядит так:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.Extensions.Options" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

Есть ли что-то еще, что мне нужно сделать?

ОБНОВИТЬ

Как отметил @Niladri, я перепутал страницы MVC и Razor (я открою отдельный вопрос по этой теме).

Теперь я удалил класс контроллера, потому что он не нужен для бритвенных страниц. Во всяком случае, главная проблема в том, что если я добавлю@using Microsoft.Extensions.Options на любой странице это не позволяет загружать страницу.

Но я не вижу никаких ошибок или исключений.

 Camilo Terevinto21 окт. 2017 г., 22:00
Вы видите что-нибудь в окне вывода?
 Niladri21 окт. 2017 г., 22:31
как насчет помещения значения в viewbag внутри действия контроллера?

Ответы на вопрос(2)

вам все еще нужно добавить приведенный ниже код в ваш файл startup.cs

services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddOptions();
services.Configure<MyOptions>(Configuration); 

также вам нужно установить значение по умолчанию RefreshTime в appsettings.json, а затем использовать приведенный ниже код на странице.cshtml

@using Microsoft.Extensions.Options;
@using <enter the namespace for your MyOptions class here>;
@inject IOptions<MyOptions> Options
@page
@model AboutModel
@{
    ViewData["Title"] = "About";
}
<
<h3>@Model.Message</h3>
<br />
<div>
    <h3>Options</h3>
    <h4>Sub Options</h4>
    <p><b>Refresh time</b> @Options.Value.SubOpt.RefreshTime</p>
</div>

дайте мне знать, если это работает для вас.

 Niladri22 окт. 2017 г., 09:09
У страниц бритвы нет контроллера. Они очень похожи на веб-страницу с кодом. Обычный контроллер MVC не будет работать
 Niladri22 окт. 2017 г., 09:06
Бритвенные страницы не требуют контроллера. Может быть, вы перепутали
 Niladri22 окт. 2017 г., 09:05
Я изменил модель с использованием в моем коде для моего класса опций. Должна быть только одна модель. Кстати, вы используете только просмотр бритвы MVC или страницы бритвы?
 Mark22 окт. 2017 г., 09:07
Я пытаюсь использовать только бритву страниц ... но я запутался в документации. Мне не так ясно разница в кодировании между ними
 Mark22 окт. 2017 г., 09:00
Возможно, я не понимаю ваш ответ - я прошу прощения. Но эти 3 строки уже есть, см. Мой вопрос. Проблема в том, что страница не загружается, вместо этого загружается мой индекс. Это происходит, даже если на пустую страницу я добавляю только@using Microsoft.Extensions.Options
Решение Вопроса

Вот:

Директива @page Razor превращает файл в действие MVC, что означает, что он может обрабатывать запросы.@page должна быть первой директивой Razor на странице.

Следовательно, решение очень простое, просто измените порядок директив:

@page
@using Microsoft.Extensions.Options
@inject IOptions<MyOptions> Options
@model AboutModel
@{
    ViewData["Title"] = "About";
}
<
<h3>@Model.Message</h3>
<br />
<div>
    <h3>Options</h3>
    <p><b>Refresh time</b> @Options.Value.SubOpt.RefreshTime</p>
</div>

Ваш ответ на вопрос