Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

По соглашению, принятому в ASP.NET Core (что было и в ASP.NET МУС), экземпляр View или PartialView визуализирует файл

*.cshtml
с таким же именем, как у метода. Представление должно находиться либо в каталоге с именем контроллера (без суффикса
Controller
), либо в каталоге
Shared
(оба расположены внутри родительского каталога
Views
).

Например, следующий код будет визуализировать представление

SampleAction.cshtml
, находящееся в каталоге
Views\Sample
или
Views\Shared
:

[Route("[controller]/[action]")]

public class SampleController: Controller

{

public ActionResult SampleAction

{

return View;

}

}

На

заметку!
Первым производится поиск в каталоге с именем контроллера. Если представление там не обнаружено, то поиск выполняется в каталоге
Shared
. Если оно по-прежнему не найдено, тогда генерируется исключение.

Чтобы визуализировать представление с именем, которое отличается от имени метода действия, передавайте имя файла (без расширения

cshtml
). Показанный ниже код будет визуализировать представление
CustomViewName.cshtml
:

public ActionResult SampleAction

{

return View("CustomViewName");

}

Последние две перегруженные версии предназначены для передачи объекта данных, который становится моделью для представления. В первом примере применяется стандартное имя представления, а во втором указывается другое имя представления:

public ActionResult SampleAction

{

var sampleModel = new SampleActionViewModel;

return View(sampleModel);

}

public ActionResult SampleAction

{

var sampleModel = new SampleActionViewModel;

return View("CustomViewName",sampleModel);

}

В следующем разделе подробно рассматривается механизм визуализации Razor с использованием представления, которое визуализируется из метода действия по имени

RazorSyntax
класса
HomeController
. Метод действия будет получать запись
Car
из экземпляра класса
CarRepo
, внедряемого в метод, и передавать экземпляр
Car
в качестве модели представлению.

Откройте

HomeController
в каталоге
Controllers
приложения
AutoLot.Mvc
и добавьте следующий оператор
using
:

using AutoLot.Dal.Repos.Interfaces;

Затем добавьте в контроллер метод

Razorsyntax
:

[HttpGet]

public IActionResult RazorSyntax([FromServices] ICarRepo carRepo)

{

var car = carRepo.Find(1);

return View(car);

}

Метод действия декорируется атрибутом

HTTPGet
с целью установки этого метода в качестве конечной точки приложения для
/Home/RazorSyntax
при условии,
что поступивший запрос является HTTP-запросом
GET
. Атрибут
FromServices
на параметре
ICarRepo
информирует ASP.NET Core о том, что параметр не должен привязываться к каким-либо входящим данным, а взамен метод получает экземпляр реализации
ICarRepo
из контейнера DI (dependency injection — внедрение зависимостей). Метод получает экземпляр
Car
и возвращает экземпляр
ViewResuit
с применением метода
View
. Поскольку имя представления не было указано, ASP.NET Core будет искать представление с именем
RazorSyntax.cshtml
в каталоге
Views\Home
или
Views\Shared
. Если ни в одном местоположении представление не найдено, тогда клиенту (браузеру) возвратится исключение.

Запустите приложение и перейдите в браузере по ссылке

https://localhost:5001/Home/RazorSyntax
(в случае использования Visual Studio и IIS вам понадобится изменить номер порта). Так как в проекте отсутствует представление, которое может удовлетворить запрос, в браузер возвращается исключение. Вспомните из главы 29, что внутри метода
Configure
класса
Startup
в конвейер HTTP добавляется вызов
UseDeveloperExceptionPage
, если средой является
Development
. Результаты работы этого метода показаны на рис. 31.1.

Страница исключений для разработчиков предоставляет обширную информацию для отладки приложения, в числе которой низкоуровневые детали исключения, укомплектованные трассировкой стека. Теперь закомментируйте приведенную ниже строку в методе

Configure
и замените ее "стандартным" обработчиком ошибок:

if (env.IsDevelopment)

{

// app.UseDeveloperExceptionPage;

app.UseExceptionHandler("/Home/Error");

...

}

Снова запустив приложение и перейдя по ссылке

http://localhost:5001/Home/RazorSyntax
, вы завидите стандартную страницу ошибок, которая показана на рис. 31.2.

На заметку! Во всех примерах URL в этой главе применяется веб-сервер Kestrel и порт 5001. Если вы имеете дело с Visual Studio и веб-сервером IIS Express, тогда используйте URL из профиля для IIS в файле

launchsettings.json
.

Стандартный обработчик ошибок выполняет перенаправление ошибок методу действия

Error
класса
HomeController
. Не забудьте восстановить применение страницы исключений для разработчиков в методе
Configure
:

if (env.IsDevelopment)

{

app.UseDeveloperExceptionPage;

...

}

Дополнительные сведения о настройке обработки ошибок и доступных вариантах ищите в документации по ссылке

https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/error-handling
.

Поделиться:
Популярные книги

Перестройка миров. Тетралогия

Греков Сергей
Перестройка миров
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Перестройка миров. Тетралогия

Пятничная я. Умереть, чтобы жить

Это Хорошо
Фантастика:
детективная фантастика
6.25
рейтинг книги
Пятничная я. Умереть, чтобы жить

Внешники

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники

Барон ненавидит правила

Ренгач Евгений
8. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон ненавидит правила

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.25
рейтинг книги
Паладин из прошлого тысячелетия

Релокант 9

Flow Ascold
9. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант 9

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Я тебя не предавал

Бигси Анна
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не предавал

Земная жена на экспорт

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Земная жена на экспорт

Лорд Системы 7

Токсик Саша
7. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 7

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2