Передача данных в представление

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 19.11.2019

Существуют различные способы передачи данных из контроллера в представление:

  • ViewData

  • ViewBag

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

ViewData

ViewData представляет словарь из пар ключ-значение:

public IActionResult Index()
{
    ViewData["Message"] = "Hello ASP.NET Core";

    return View();
}

Здесь динамически определяется во ViewData объект с ключом "Message" и значением "Hello ASP.NET Core". При этом в качестве значения может выступать любой объект. И после этому мы можем его использовать в представлении:

@{
    ViewData["Title"] = "Index";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>

<p>Random text.</p>

Причем не обязательно устанавливать все объекты во ViewData в контроллере. Так, в данном случае объект с ключом "Title" устанавливается непосредственно в представлении.

ViewBag

ViewBag во многом подобен ViewData. Он позволяет определить различные свойства и присвоить им любое значение. Так, мы могли бы переписать предыдущий пример следующим образом:

public IActionResult Index()
{
    ViewBag.Message = "Hello ASP.NET Core";

    return View();
}

И таким же образом нам надо было бы изменить представление:

@{
    ViewBag.Title = "Index";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

<p>Random text.</p>

И не важно, что изначально объект ViewBag не содержит никакого свойства Message, оно определяется динамически. При этом свойства ViewBag могут содержать не только простые объекты типа string или int, но и сложные данные. Например, передадим список:

public IActionResult Index()
{
    ViewBag.Countries = new List<string> { "Бразилия", "Аргентина", "Уругвай", "Чили" };
    return View();
}

И также в представлении мы можем получить этот список:

<h3>В списке @ViewBag.Countries.Count элемента:</h3>

@foreach(string country in ViewBag.Countries)
{
    <p>@country</p>
}

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

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

Модель представления является во многих случаях более предпочтительным способом для передачи данных в представление. Для передачи данных в представление используется одна из версий метода View:

public IActionResult Index()
{
    List<string> countries = new List<string> { "Бразилия", "Аргентина", "Уругвай", "Чили" };
    return View(countries);
}

В метод View передается список, поэтому моделью представления Index.cshtml будет тип List<string> (либо IEnumerable<string>). И теперь в представлении мы можем написать так:

@model List<string>
@{
    ViewBag.Title = "Index";
}

<h3>В списке @Model.Count элемента</h3>
@foreach(string country in Model)
{
    <p>@country</p>
}

В самом начале представления с помощью директивы @model устанавливается модель представления. Тип модели должен совпадать с типом объекта, который передается в метод View() в контроллере.

Установка модели указывает, что объект Model теперь будет представлять объект List<string> или список. И мы сможем использовать Model в качестве списка.

Модель представления в ASP.NET MVC Core

Представления, для которых определена модель, еще называют строго типизированными или strongly-typed views.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850