Запустите приложение и перейдите в браузере по ссылке
https://localhost:5001/Home/RazorSyntax
(в случае использования Visual Studio и IIS вам понадобится изменить номер порта). Так как в проекте отсутствует представление, которое может удовлетворить запрос, в браузер возвращается исключение. Вспомните из главы 29, что внутри метода
Configure()
класса
Startup
в конвейер HTTP добавляется вызов
UseDeveloperExceptionPage()
, если средой является
Development
. Результаты работы этого метода показаны на рис. 31.1.
Страница исключений для разработчиков предоставляет обширную информацию для отладки приложения, в числе которой низкоуровневые детали исключения, укомплектованные трассировкой стека. Теперь закомментируйте приведенную ниже строку в методе
Configure()
и замените ее "стандартным" обработчиком ошибок:
if (env.IsDevelopment())
{
<b> // app.UseDeveloperExceptionPage();</b>
<b> app.UseExceptionHandler("/Home/Error");</b>
...
}
Снова запустив приложение и перейдя по ссылке
http://localhost:5001/Home/RazorSyntax
, вы завидите стандартную страницу ошибок, которая показана на рис. 31.2.
На заметку! Во всех примерах URL в этой главе применяется веб-сервер Kestrel и порт 5001. Если вы имеете дело с Visual Studio и веб-сервером IIS Express, тогда используйте URL из профиля для IIS в файле
launchsettings.json
.
Стандартный обработчик ошибок выполняет перенаправление ошибок методу действия
Error
класса
HomeController
. Не забудьте восстановить применение страницы исключений для разработчиков в методе
Configure()
:
if (env.IsDevelopment())
{
<b> app.UseDeveloperExceptionPage();</b>
...
}
Дополнительные сведения о настройке обработки ошибок и доступных вариантах ищите в документации по ссылке
https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/error-handling
.
Механизм визуализации и синтаксис Razor
Механизм визуализации Razor задумывался как усовершенствование механизма визуализации Web Forms и использует Razor в качестве основного языка. Razor — это код серверной стороны, который встраивается в представление, базируется на C# и избавляет от многих неудобств, присущих механизму визуализации Web Forms. Встраивание Razor в HTML и CSS приводит к тому, что код становится намного чище и лучше для восприятия, чем в случае, когда применяется синтаксис механизма визуализации Web Forms.
Первым делом добавьте новое представление, щелкнув правой кнопкой мыши на имени каталога
Views\Home
в проекте
AutoLot.Mvc
и выбрав в контекстном меню пункт
Add►
New Item (Добавить►Новый элемент). В открывшемся диалоговом окне
Add New Item —
AutoLot.Mvc
(Добавить новый элемент —
AutoLot.Mvc
) выберите шаблон
Razor View — Empty (Представление Razor — Пустое) и назначьте представлению имя
RazorSyntax.cshtml
.
На заметку! Контекстное меню, открывшееся в результате щелчка правой кнопкой мыши на
Views\Home
, содержит также пункт
Add►
View (Добавить►Представление). Тем не менее, его выбор приводит к переходу в то же самое диалоговое окно
Add New Item.
Представления Razor, как правило, строго типизированы с использованием директивы
@model
(обратите внимание на букву
m
в нижнем регистре). Измените тип нового представления на сущность
Car
, добавив в начало файла представления такой код:
@model AutoLot.Models.Entities.Car
Поместите в верхнюю часть страницы дескриптор <
hl
>. Он не имеет ничего общего с Razor, а просто добавляет заголовок к странице:
<h1>Razor Syntax</h1>
Блоки операторов Razor открываются с помощью символа
@
и являются либо самостоятельными операторами (вроде
foreach
), либо заключаются в фигурные скобки, как демонстрируется в следующих примерах:
@for (var i = 0; i < 15; i++)
{
// Делать что-то.
}
@{
// Блок кода.
var foo = "Foo";
var bar = "Bar";
var htmlString = "<ul><li>one</li><li>two</li></ul>";
}
Чтобы вывести значение переменной в представление, просто укажите символ
@
с именем переменной, что эквивалентно вызову
Response.Write()
. Как видите, при выводе напрямую в браузер после оператора нет точки с запятой:
@foo
<br />
@htmlString
<br />
@foo.@bar
<br />
В предыдущем примере две переменные комбинируются посредством точки между ними (
@foo.@bar
). Это не обычная "точечная" запись в языке С#, предназначенная для навигации по цепочке свойств. Здесь просто значения двух переменных выводятся в поток ответа с физической точкой между ними. Если вас интересует "точечная" запись в отношении переменной, тогда примените
@
к переменной и записывайте свой код стандартным образом: