Чтобы визуализировать представление с именем, которое отличается от имени метода действия, передавайте имя файла (без расширения 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();
...
}