Литмир - Электронная Библиотека
A
A

На заметку! Исходный код, рассматриваемый в этой главе, находится в папке

Chapter_31
внутри хранилища GitHub для настоящей книги. Вы также можете продолжить работу с решением, начатым в главе 29 и обновленным в главе 30.

Введение в представления ASP.NET Core

 При построении служб ASP.NET Core были задействованы только части "М " (модели) и "С" (контроллеры ) паттерна МУС. Пользовательский интерфейс создается с применением части "V", т.е. представлений паттерна МУС. Представления строятся с использованием кода HTML, JavaScript, CSS и Razor. Они необязательно имеют страницу базовой компоновки и визуализируются из метода действия контроллера или компонента представления. Если вы имели дело с классической инфраструктурой ASP.NET МУС, то все должно выглядеть знакомым.

Экземпляры класса ViewResult и методы действий

Как кратко упоминалось в главе 29, объекты результатов

ViewResult
и
PartialView
являются экземплярами класса
ActionResult
, которые возвращаются из методов действий с применением вспомогательных методов класса
Controller
. Класс
PartialViewResult
спроектирован для визуализации внутри другого представления и не использует страницу компоновки, тогда как класс
ViewResult
обычно визуализируется в сочетании со страницей компоновки.

По соглашению, принятому в 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
. Если ни в одном местоположении представление не найдено, тогда клиенту (браузеру) возвратится исключение.

609
{"b":"847442","o":1}