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

на главную - закладки

Жанры

Язык программирования 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
.

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

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Голодные игры

Коллинз Сьюзен
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Голодные игры

Последняя Арена 8

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

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона