2.5. Представления

Самый популярный и эффективный метод отобразить пользователю страницу – использовать представления. До сих пор мы отображали что-то простое с помощью контроллеров, отображать так целую страницу может быть далеко не самым эффективным решением.

Контроллеры, с которыми мы познакомились должны принимать только базовые решения, вся логика должна жить отдельно. Контроллеры не должны отвечать и за отображение данных, это дело представлений и об этом я говорил в вводной части этой главы: .NET Core и MV

Для создания представлений сейчас самым популярным движком является Razor. Это встроенный движок, но можно создавать и свой собственный, хотя я никогда не видел в этом надобности.

Когда контроллер хочет отобразить специальный файл представления он должен вернуть в качестве результата работы метода тип ViewResult, который можно создать, просто вернув результат работы метода View:

public IActionResult Index()
{
  return View();
}

Я создам в моем тестовом проекте новый контроллер, на котором и буду показывать работу всего, что мы сейчас будем изучат. Кликаем правой кнопкой по папке Controllers:

В появившемся окне слева выбираем ASP.NET Core, справа выбираем MVC Controller Class и внизу выбираем имя файла, для этого примера это будет RazortestController.

Visual Studio создаст для нас файл со следующим содержимым:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace MyWebSite.Controllers
{
  public class RazortestController : Controller
  {
    public IActionResult Index()
    {
      return View();
    }
  }
}

Так как контроллер называется razortest а метод index, то согласно маршрутизации по умолчанию доступ к такому методу можно получить из браузера, если обратиться по следующему адресу: /razortest/index, то произойдет ошибка, потому что нет самого представление, которое должно быть отдельным файлом, где мы можем писать HTML и инструкции C# с помощью синтаксиса Razor. Ошибка будет выглядеть так:

Тут нам говорят, что View с именем Index не найдено. Его пытались найти в следующих местах:

  • /Views/Razortest/Index.cshtml
  • /Views/Shared/Index.cshtml
  • /Pages/Shared/Index.cshtml

Причем поиск происходит в указанном порядке. Первое, куда смотрит система – в папку View. Потом смотрит в папку с таким же именем, как у контроллера (кроме самого слова Controller). У нас контроллер называется RazortestController, так что отбросив слово Controller путь превращается в /views/razortest. И вот здесь должен быть файл с именем, которое совпадает с именем метода и расширением cshtml. У нас метод Index, а значит файл должен быть Index.cshtml.

Расширение файла не случайно cshtml, это сочетание cs и html и отражает реальную суть файла – здесь можно смешивать html код и cs.

Итак, теперь, когда мы обращаемся к контроллеру, он вызывает метод View, который находит файл представления, исполняет в нем код и возвращает результат пользователю в виде HTML.

Имя cshtml файла можно изменить. Если вы хотите в методе Index отобразить файл Test.cshtml, это можно сделать, если указать имя нужного нам представления в качестве параметра метода View:

public IActionResult Index()
{
  return View("Test");
}

Этот метод тоже завершит выполнение ошибкой, потому что представления с именем Test у нас тоже нет.

В тех случаях, когда представление будет использоваться только для определенного контроллера, его желательно помещать в папку с именем контроллера, в нашем случае это /views/razortest. Если представление будет использоваться сразу с несколькими разными контроллерами или действиями, то его желательно помещать в папку Shared.

Для первого примера мы создадим представление, которое будет обслуживать только один метод и поэтому вернемся к имени по умолчанию.

public IActionResult Index()
{
  return View();
}

У меня в проекте уже есть папка View, а в ней есть Home. Не помню, когда я их создавал, возможно они автоматом были созданы. Мне же нужна папка rasortest и для ее можно создать в файловой системе, используя файловый менеджер или с помощью VS (Visual Studio). Щелкаем правой кнопкой мыши по папку Views и выбираем из контекстного меню Add -> New Folder и вводим имя папки rasortest.

Теперь нужно создать View – кликаем правой кнопкой мыши по папке rasortest и выбираем Add -> New File и перед нами открывается уже знакомое окно выбора типа и имени файла. Выбирайте MVC View Page, как показано на рисунке ниже и в качестве имени файла оставляет Index:

Теперь все представления, которые мы будем использовать в контроллере RazorController будут храниться в папке Views/Razor.

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@

@{
} 

Игнорируем пока то, что для нас тут сгенерировал VS, а вместо этого напишем немного HTML кода:

<body>
    <h1>Hello</h1>
    <p>This is a view</p>
</body>
</html>

Запускаем сайт, переходит по адресу /razortest/index и видим результат страницы:

Предыдущая глава

2.4. Немного о контроллерах

Следующая глава

2.6. Модель представления

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне