При построении служб 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. Если ни в одном местоположении представление не найдено, тогда клиенту (браузеру) возвратится исключение.Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT