В настоящее время я пытаюсь расширить существующий проект ASP. NET Core MVC с помощью страницы Razor (поскольку в нескольких обучающих видеороликах утверждается, что MVC, API, Razor и Blazor могут сосуществовать в одном проекте - но ни один из них не показывает, как это делается).
Я уже понял, что мне нужно расширить Startup.cs на
services.AddRazorPages();
и
app.UseEndpoints(endpoints =>
{
// This was here already
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// I added this
endpoints.MapRazorPages();
});
Я пробовал просто добавив страницу бритвы «Тест» в папку Views
, расширив _Layout.cshtml
на
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Test">Test</a>
</li>
, затем расширив HomeController
на
public IActionResult Test()
{
return View();
}
Однако это вызывает несколько проблемы с точками останова, которые не были достигнуты, или словарь ViewData
был null
(с идентичным кодом, работающим в проекте чистой страницы Razor), вероятно, потому, что он пытается рассматривать страницу Razor как представление MVC или что-то в этом роде.
Я также попытался добавить что-то вроде
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Home/Test">Test</a>
</li>
вместо этого в макет, но это дает URL-адрес вида
https://localhost:5001/?page=%2FHome%2FTest
при нажатии на элемент панели навигации.
Я могу иметь обе вещи в разных проектах VS, но Разве нет возможности использовать их оба в одном проекте VS и в одном макете?
Если вы хотите попробовать его перед ответом, выполните следующие действия:
- Создайте новый проект / решение в Visual Studio 2019
- Выберите «ASP. NET Базовое веб-приложение» в качестве шаблона проекта
- Нажмите «Создать» и выберите «Веб-приложение (Модель -View-Controller) "в качестве шаблона с настройками по умолчанию
- Добавить поддержку Razor в Startup.cs
- Попробуйте создать простую страницу Razor, работающую в этом проекте