Следовательно, решение очень простое, просто измените порядок директив:
ющийэто руководство, я пытаюсь показать на странице 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
на любой странице это не позволяет загружать страницу.
Но я не вижу никаких ошибок или исключений.