Читаем Язык программирования C#9 и платформа .NET5 полностью

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

<p id="AutBody_Root1439"><strong>Экземпляры класса ViewResult и методы действий</strong></p>

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

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT