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

Вторым компонентом в 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();
}

По умолчанию контроллер производит поиск представления в проекте по следующим путям:

  1. /Views/[Имя_контроллера]/[Имя_представления].cshtml
  2. /Views/Shared/[Имя_представления].cshtml

При этом, если в методе View() явно не указано имя представления, то, по умолчанию, ASP.NET Core MVC пытается найти представление имя которого совпадает с названием действия. То есть, в нашем случае, когда мы перешли по пути /blog, произошли следующие действия:

  1. так как имя представления не было передано в метод View(), то для поиска необходимого представления использовалось имя Index
  2. произошел поиск необходимого файла представления по пути /Views/Blog/Index.cshtml
  3. файл найден, поэтому был создан объект типа ViewResult, который произвел рендеринг представления в html-страницу и вернул её в ответе клиенту.

Метод View() имеет несколько перегруженных версий:

public virtual ViewResult View ();
  • model — объект, содержащий необходимые данные, используемые для рендеринга представления
  • viewName — имя представления
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.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии