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

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

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

  • ViewData

  • ViewBag

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

ViewData

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

public IActionResult Index()
{
    ViewData["Message"] = "Hello METANIT.COM";
    return View();
}

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

@{
    ViewData["Title"] = "ASP.NET Core MVC";
}

<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>

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

ViewData в представлениях ASP.NET Core MVC в C#

ViewBag

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

public IActionResult Index()
{
    ViewBag.Message = "Hello METANIT.COM";

    return View();
}

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

@{
    ViewBag.Title = "ASP.NET Core MVC";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

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

public IActionResult Index()
{
    ViewBag.People = new List<string> { "Tom", "Sam", "Bob" };
    return View();
}

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

<h2>Count: @ViewBag.People.Count</h2>
<ul>
@foreach(string person in ViewBag.People)
{
    <li>@person</li>
}
</ul>
ViewBag в представлениях ASP.NET Core MVC в C#

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

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

public IActionResult Index()
{
    var people = new List<string> { "Tom", "Sam", "Bob" };
    return View(people);
}

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

@model List<string>

<h2>Count: @Model.Count</h2>
<ul>
@foreach(string person in Model)
{
    <li>@person</li>
}
</ul>

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

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

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

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

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