Содержание
Вторым компонентом в MVC выступают представления. Условно, можно сказать, что представления в нашем проекте ASP.NET Core MVC — это фасад нашего приложения, то есть то, что видит пользователь, когда запускает приложение, когда переходит по ссылкам на страницах и т.д. Представления в ASP.NET Core MVC — это файлы с расширением .cshtml
. Само расширение даёт нам подсказку о том, что это за файлы: cs — используется язык программирования C#, html — используется HTML. При этом, в представлениях часто используется язык разметки Razor, позволяющий как раз и комбинировать C#/HTML.
Где хранятся представления в ASP.NET Core MVC?
По умолчанию, все представления в проекте ASP.NET Core MVC хранятся либо в папке Views
, либо в папке Shared
. Если мы создадим новое приложение ASP.NET Core MVC, то увидим следующие представления:
Здесь мы видим несколько представлений:
- в папке Views/Home — находятся представления, относящиеся к контроллеру
HomeController
. - в папке Views/Shared — находятся представления, которые используются всем приложением, например, в Views/Shared/_Layout.cshtml содержится макет нашего приложения
- в корне Views также находятся два файла _ViewImports.cshtml и _ViewStart.cshtml, которые содержат код, который автоматически добавляется ко всем представлениям. _ViewImports.cshtml устанавливает некоторые общие для всех представлений пространства имен, а _ViewStart.cshtml устанавливает общую мастер-страницу
Использование представлений
Чтобы продемонстрировать работу приложения ASP.NET Core MVC, создадим новое приложение и пройдем путь от создания представления до его вывода пользователю.
Вначале добавим в папку Controllers
новый контроллер с названием BlogController
:
Этот контроллер будет использовать нами в дальнейшем для отображения условных записей из блога. Код контроллера оставим по умолчанию:
using Microsoft.AspNetCore.Mvc; namespace AspViews.Controllers { public class BlogController : Controller { public IActionResult Index() { return View(); } } }
Теперь создадим в папке Views
новую папку Blog
в которой будем хранить все представления для нового контроллера и добавим в эту папку новое представление с именем Index.cshtml:
В итоге вы увидите файл с «пустым» представлением:
@* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @{ }
Обычно, когда мы заходим на главную страницу какого-нибудь блога, то мы видим список последних опубликованных записей. Пусть и в нашем представлении Index.cshtml будет показываться список последних записей. Напишем следующий код:
@* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ <h2>Последние записи блога</h2> @{ }
По сути, здесь мы добавили только заголовок для страницы:
<h2>Последние записи блога</h2>
так как пока у нас ещё нет никаких записей. Однако, если мы запустим теперь приложение и перейдем по пути /blog
, то увидим следующее:
Нам не потребовалось каким-либо образом указывать какой макет применить к нашей странице, указывать где-либо какое именно представление использовать для маршрута и т.д. всё это было выполнено ASP.NET Core MVC. Как это было сделано — рассмотрим далее.
Класс ViewResult и метод View()
За работу с представлениями в ASP.NET Core MVC отвечает объект ViewResult
. Объекты этого класса производят рендеринг представлений в веб-страницы и возвращают их в виде ответа клиенту. Для создания объектов этого класса отвечает метод View()
контроллера. Именно этот метод и вызывался в нашем контроллере:
public IActionResult Index() { return View(); }
По умолчанию контроллер производит поиск представления в проекте по следующим путям:
- /Views/[Имя_контроллера]/[Имя_представления].cshtml
- /Views/Shared/[Имя_представления].cshtml
При этом, если в методе View() явно не указано имя представления, то, по умолчанию, ASP.NET Core MVC пытается найти представление имя которого совпадает с названием действия. То есть, в нашем случае, когда мы перешли по пути /blog, произошли следующие действия:
- так как имя представления не было передано в метод
View()
, то для поиска необходимого представления использовалось имяIndex
- произошел поиск необходимого файла представления по пути /Views/Blog/Index.cshtml
- файл найден, поэтому был создан объект типа
ViewResult
, который произвел рендеринг представления в html-страницу и вернул её в ответе клиенту.
Метод View()
имеет несколько перегруженных версий:
public virtual ViewResult View (); |
|
public virtual ViewResult View (object? model); |
|
public virtual ViewResult View (string? viewName); |
|
public virtual ViewResult View (string? viewName, object? model); |
Итого
Представления отображают информацию пользователю и, обычно, хранятся в папках View или View/Shared приложения. Файл представления имеет расширение cshtml. За рендеринг представления в html-страницу отвечают объекты класса ViewResult
, которые создаются методом View()
класса Controller
.