Как расширить проект ASP. NET Core MVC с помощью Razor Pages? - PullRequest
0 голосов
/ 12 июля 2020

В настоящее время я пытаюсь расширить существующий проект 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 и в одном макете?

Если вы хотите попробовать его перед ответом, выполните следующие действия:

  1. Создайте новый проект / решение в Visual Studio 2019
  2. Выберите «ASP. NET Базовое веб-приложение» в качестве шаблона проекта
  3. Нажмите «Создать» и выберите «Веб-приложение (Модель -View-Controller) "в качестве шаблона с настройками по умолчанию
  4. Добавить поддержку Razor в Startup.cs
  5. Попробуйте создать простую страницу Razor, работающую в этом проекте

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Для страниц razor не требуется контроллер.

Каталог по умолчанию - /Pages, тогда по умолчанию все страницы должны находиться внутри каталога Pages. Если вы хотите изменить его, вы можете сделать это, переопределив конфигурацию в ConfigureServices при запуске.

services.AddRazorPages(c=>c.RootDirectory = "/PagesRootDir");

Чтобы создать ссылку на страницу, вы должны использовать тег asp-page. Например, если имя страницы Test, физический путь (по умолчанию) будет Pages\Test. Для создания ссылки вам нужно будет использовать:

<a asp-page="/Test">Test Page</a>

По умолчанию страницы не будут использовать макет по умолчанию, вы всегда можете переопределить его.

@page
@model WebApplication1.Pages.TestModel
@{
    Layout = "_Layout";
}

<h1>
    Test Page
</h1>

Чтобы удалить layout:

Layout = null;

Если вы хотите использовать «Views \ Shared \ _Layout» на всех страницах, вам нужно будет создать _ViewStart со следующим кодом:

@{
    Layout = "_Layout";
}

введите описание изображения здесь

0 голосов
/ 12 июля 2020
• 1000

Используя это, я могу использовать элемент навигации в стиле asp-page без адаптации контроллера.

Я все равно приму любой ответ, если вы покажете мне, как это сделать, не нарушая соглашений по умолчанию (Мои основные проблема в том, что я понятия не имею, как это сделать с папкой Pages, папкой Views и _Layout.cshtml, находящимся только в одной из них.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...