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

Что такое представления в приложении ASP.NET Core MVC?

В шаблоне Model-View-Controller (MVC) представление - это компонент, который содержит логику для представления данных модели (данных модели, предоставленных ему контроллером) в качестве пользовательского интерфейса, с которым может взаимодействовать конечный пользователь. Представления в MVC - это HTML-шаблоны со встроенной разметкой Razor, которые генерируют контент, отправляемый клиенту. В наших следующих статьях мы подробно обсудим синтаксис Razor.

Где хранятся файлы представлений в приложении ASP.NET Core MVC? В ASP.NET Core MVC представления имеют расширение «.cshtml», если язык программирования - C# с разметкой Razor. Обычно у каждого контроллера есть своя собственная папка, в которой будут храниться файлы представлений для конкретного контроллера. Папки для контроллера будут создаваться в папке Views. Необходимо помнить, что имя файла представления совпадает с именем метода действия контроллера с расширением .cshtml.

Допустим, у нас есть приложение ASP.NET Core MVC с двумя контроллерами, то есть HomeController и StudentController. HomeController создается с помощью следующих трех методов действия.

  • AboutUs()
  • ContactUs()
  • Index()

С другой стороны, StudentController создается с помощью следующих четырех методов действия.

  • Index()
  • Details()
  • Edit()
  • Delete()

Ниже приведена структура папок и файлов представлений.

Структура папок Views в ASP.NET Core MVC

Как вы можете видеть, для каждого контроллера в папке Views создается отдельная папка. Домашний контроллер представлен домашней папкой, а ученический контроллер представлен студенческой папкой внутри папки «Виды». Домашняя папка содержит представления для веб-страниц Index, AboutUs и ContactUs. Таким образом, всякий раз, когда пользователь запрашивает любую из этих веб-страниц, метод действия HomeController определяет, какое из трех представленных выше Views использовать для создания веб-страницы, и возвращать его пользователю.

Аналогичным образом папка «Студент» содержит представления для веб-страниц «Индекс», «Сведения», «Редактировать» и «Удалить». Поэтому, когда пользователь запрашивает какую-либо из этих веб-страниц, метод действия StudentController определяет, какое из представленных выше представлений использовать для создания веб-страницы и возврата к пользователю.

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

Разбор представлений на примере: Чтобы лучше понимать, как работают представления, давайте сначала изменим HomeController, как показано ниже.

using Microsoft.AspNetCore.Mvc;

namespace FirstCoreMVCApplication.Controllers
{
    public class HomeController : Controller
    {
        public ViewResult Details()
        {
            return View();
        }
    }
}

Как вы можете видеть в приведенном выше HomeController, у нас есть только один метод действия. Поскольку типом возврата метода действия Details() является ViewResult, этот метод действия будет возвращать представление. Чтобы вернуть представление, здесь мы используем метод расширения View(), предоставляемый базовым классом Microsoft.AspNetCore.Mvc.Controller.

Теперь запустите приложение и перейдите по URL «/Home/Details», и вы увидите следующую ошибку.

An unhandled exception occured while processing the request. InvalidOperationException: The view 'Details' was not found. The following locations were searched: /Views/Home/Details.chtml /Views/Shared/Details.chtml /Pages/Shared/Details.chtml

Почему мы получили вышеуказанную ошибку?

Поскольку мы возвращаем представление из метода действия Details в HomeController, по умолчанию ASP.NET Core MVC Framework будет искать файл с именем Details.cshtml в следующих местах:

Сначала он будет искать файл Details.cshtml в папке /Views/Home, поскольку метод действия принадлежит HomeController.

Затем он будет искать в папке /Views/Shared/

И, наконец, он попытается найти этот файл в папке /Pages/Shared.

Если запрошенный файл .cshtml найден в любой из указанных выше папок, то представление генерирует HTML-код и отправляет сгенерированный HTML-файл пользователю, который изначально сделал запрос. С другой стороны, если запрошенный файл не найден ни в одном из указанных мест, мы получим ошибку.

Как создать View в приложении ASP.NET Core MVC?

Сначала создайте папку Views в корневой директории приложения. Затем создайте папку Home.

Теперь щелкните правой кнопкой мыши домашнюю папку и выберите Add => New Item из контекстного меню, которое откроет окно Add New Item. В этом окне выберите Razor View, введите имя Details.cshtml и, наконец, нажмите кнопку Add, как показано ниже.

Создание нового представления в ASP.NET Core MVC

После того как вы создадите представление Details.cshtml, структура папок Views должна выглядеть следующим образом.

Как хранятся представления в ASP.NET Core MVC

Теперь откройте файл Details.cshtml, а затем скопируйте и вставьте в него следующий код.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <h1>Details view belongs to Views/Home folder</h1>
</body>
</html>

Запустите приложение и перейдите по URL-адресу /Home/Details, и вы увидите результат, как и ожидалось в браузере. Если вы перейдете к определению базового класса Controller, то вы найдете там четыре версии метода View с перегрузкой, как показано на рисунке ниже.

Методы ViewResult в .NET Core MVC

Если вы используете метод расширения View() или View(object model), чтобы вернуть представление, он будет искать файл представления с тем же именем, что и имя метода действия.

Например, в приведенном ниже коде мы используем метод расширения View(), который не принимает никаких параметров для возврата представления из метода действия Details в HomeController. Таким образом, в этом случае по умолчанию среда MVC будет искать представление с именем Details.cshtml в папке Views/Home.

public class HomeController : Controller
{
    public ViewResult Details()
    {
        return View("Test")
    }
}

Метод View(string viewName)

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

Щелкните правой кнопкой мыши домашнюю папку и выберите Add => New item, чтобы открыть окно Добавить новый элемент. В этом окне выберите представление Razor и введите имя Test.cshtml, затем нажмите кнопку Add, которая добавит представление Test.cshtml в домашнюю папку. Откройте файл представления Test.cshtml, а затем скопируйте и вставьте приведенный ниже код.

  public class HomeController : Controller
{
    public ViewResult Details()
    {
        return View("Views/Home/Test.cshtml")
    }
}

Примечание: если вы используете абсолютный путь, то обязательно используйте расширение .cshtml.

Когда вы используете абсолютный путь, чтобы попасть в корневой каталог проекта, вы можете использовать / или ~/.

return View("Views/Home/Test.cshtml");
return View("/Views/Home/Test.cshtml");
return View("~/Views/Home/Test.cshtml");

В чем преимущества использования представлений в приложении ASP.NET Core MVC?

Views в MVC обеспечивает разделение кода вашего приложения. Он отделяет пользовательский интерфейс от бизнес-логики или, можно сказать, от остальной части приложения. Представления ASP.NET Core MVC используют синтаксис Razor, который позволяет легко переключаться между разметкой HTML и кодом C#. Общие или повторяющиеся аспекты пользовательского интерфейса приложения можно легко повторно использовать между представлениями, используя макет и общие директивы или частичные представления.