dir.by  
Программирование, разработка, тестирование
ASP.NET MVC (web сайт на архитектуре Model-View-Controller)
Передаем данные из контроллера в представление в ASP.NET MVC. Используем ViewBag, ViewData, TempData, Model (строго типизированное представление)
  Посмотрели 13401 раз(а)    
 Передаем данные из контроллера в представление в ASP.NET MVC 
последнее обновление: 3 октября 2018
Существуют различные способы передачи данных из контроллера в представление:
Способ 1
Объект ViewBag. Это объект с динамическими свойствами (то есть во время выполнения программы мы можем задавать любые свойства и использовать их).
Способ 2
Объект ViewData. Это map объект (ключ - значение).
Способ 3
Объект TempData. Это map объект (ключ - значение).
Способ 4
Через Model (строго типизированное представление)
Способ 1 Объект ViewBag
В объект ViewBag мы можем добавить любое количество свойств. Обращение к свойствам идет через символ '.'
Создаем новое приложение ASP.NET MVC ... и напишем код:
  C#     Контроллер
Controllers/HomeController.сs
using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace WebApplication2.Controllers
{
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               // ViewBag может содержать любые свойства
               ViewBag.myText = "Hello";
               ViewBag.myValues = new List<int>{10, 20, 50};
               ViewBag.aaa = 456789;

               return View();
          }
     }
}
  Html     Представление
Views/Home/Index.cshtml
@{
     Layout = null;
}

<!DOCTYPE html>

<html>
<head>
     <meta name="viewport" content="width=device-width" />
     <title>Index</title>
</head>

<body>
     <div>
          <!-- показываем ViewBag.MyText на экране -->
          @ViewBag.MyText

          <br />

          <!-- показываем ViewBag.myValues на экране -->
          @foreach(int value in ViewBag.myValues)
          {
              
               @value
               <br />
          }

          <br />

          <!-- показываем ViewBag.aaa на экране -->
          @ViewBag.aaa
     </div>
</body>
</html>
На заметку! Символ @ в файле представления Index.cshtml означает, что используется движок Razor для представления...
Способ 2 Объект ViewData
Объект ViewData похож на ViewBag. Только в объекте ViewData обращение к свойствам идет через ["ИмяСвойства"]
Создаем новое приложение ASP.NET MVC ... и напишем код:
  C#     Контроллер
Controllers/HomeController.сs
using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace WebApplication2.Controllers
{
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               // ViewData может содержать любые данные
               ViewData["myText"] = "Hello";
               ViewData["myValues"] = new List<int> { 10, 20, 50 };
               ViewData["aaa"] = 456789;

               return View();
          }
     }
}
  Html     Представление
Views/Home/Index.cshtml
@{
     Layout = null;
}

<!DOCTYPE html>

<html>
<head>
     <meta name="viewport" content="width=device-width" />
     <title>Index</title>
</head>

<body>
     <div>
          <!-- показываем ViewData["MyText"] на экране -->
          @ViewData["MyText"]

          <br />

          <!-- показываем ViewData["myValues"] на экране -->
          @foreach(int value in (List<int>)ViewData["myValues"])
          {
              
               @value
               <br />
          }

          <br />

          <!-- показываем ViewData["aaa"] на экране -->
          @ViewData["aaa"]
     </div>
</body>
</html>
На заметку! Символ @ в файле представления Index.cshtml означает, что используется движок Razor для представления...
Способ 3 Объект TempData
Объект TempData похож на ViewData.
Но значение TempData можно получить в пределах одного запроса. То есть если вы установили в методе Index, то в представлении Index вы можете вывести сколько угодно раз, но если это значение выводится и на других представлениях, то в них вы уже не сможете его получить - так как оно уже получено.
В объекте TempData обращение к свойствам идет через ["ИмяСвойства"]
Создаем новое приложение ASP.NET MVC ... и напишем код:
  C#     Контроллер
Controllers/HomeController.сs
using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace WebApplication2.Controllers
{
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               // TempData может содержать любые данные
               TempData["myText"] = "Hello";
               TempData["myValues"] = new List<int> { 10, 20, 50 };
               TempData["aaa"] = 456789;

               return View();
          }
     }
}
  Html     Представление
Views/Home/Index.cshtml
@{
     Layout = null;
}

<!DOCTYPE html>

<html>
<head>
     <meta name="viewport" content="width=device-width" />
     <title>Index</title>
</head>

<body>
     <div>
          <!-- показываем TempData["MyText"] на экране -->
          @TempData["MyText"]

          <br />

          <!-- показываем TempData["myValues"] на экране -->
          @foreach (int value in (List<int>)TempData["myValues"])
          {
              
               @value
               <br />
          }

          <br />

          <!-- показываем TempData["aaa"] на экране -->
          @TempData["aaa"]
     </div>
</body>
</html>
На заметку! Символ @ в файле представления Index.cshtml означает, что используется движок Razor для представления...
Способ 4 Через Model (строго типизированное представление)
Строго типизированное представление это представление с указанием типа модели в начале файла.
Передача данных из контроллера в представление через Model означает следующее:
в файле контроллера
ИмяФайла.cs
НашеЗначение передаем в
return View(НашеЗначение);
в файле представления
ИмяФайла.cshtml
1) в самом верху файла представления указываем тип модели
@model НашТип

2) В любом месте в файле представления мы можем использовать слово Model
Рассмотрим пример
Создаем новое приложение ASP.NET MVC ... и напишем код:
  C#     Контроллер
Controllers/HomeController.сs
using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace WebApplication2.Controllers
{
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               List<int> values = new List<int>() { 1, 6, 7 };

               // передаем Наше значение              
               return View(values);
          }
     }
}
  Html     Представление
Views/Home/Index.cshtml
<!-- указываем тип для Model -->
@model List<int>

@{
     Layout = null;
}

<!DOCTYPE html>

<html>
<head>
     <meta name="viewport" content="width=device-width" />
     <title>Index</title>
</head>

<body>
     <div>
          <!-- Model содержит наше значение -->
          @foreach (int value in Model)
          {
               @value
               <br />
          }
     </div>
</body>
</html>
На заметку! Символ @ в файле представления Index.cshtml означает, что используется движок Razor для представления...

Что такое слово Model в файле представления?
На самом деле файл представления это класс WebViewPage
В классе WebViewPage есть член-класса Model
Model имеет НашТип объявленный в самом верху файла представления @model НашТип
Model содержит НашеЗначение переданное в файле Контроллера в return View(НашеЗначение);

Другими словами мы объявили тип объекта модели представления при помощи @model (маленькая m)
доступ к значению получаем при помощи Model (заглавная M).
Для тех кто хочет знать, где находятся ViewBag, ViewData, TempData, Model
// базовый класс контроллера
class ControllerBase
{
      ...
      public dynamic ViewBag = new ExpandoObject();
      public ViewDataDictionary ViewData = new ViewDataDictionary();
      public TempDataDictionary TempData = new TempDataDictionary();
      ...
}

// базовый класс представления
class WebViewPage
{
      ...
      public dynamic ViewBag = new ExpandoObject();
      public ViewDataDictionary ViewData = new ViewDataDictionary();
      public TempDataDictionary TempData = new TempDataDictionary();
      public Object Model;
      ...
}
На заметку для разработчиков!
Как правило, основные данные передаются через Model (способ 4).
Вспомогательная информация передается через ViewBag (способ 1), ViewData (способ 2), TempData (способ 3).
 
← Предыдущая тема
Создаем новое приложение ASP.NET MVC
 
Следующая тема →
Что такое View (представление) и операторы Razor в ASP.NET MVC
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Экскурсии по Москве Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
  Объявления  
  Объявления  
 
Что такое MVC в ASP.NET ?
Создаем новое приложение ASP.NET MVC
Контроллер (Controller)
Передаем данные из контроллера в представление в ASP.NET MVC. Используем ViewBag, ViewData, TempData, Model (строго типизированное представление)
Представление (View)
Что такое View (представление) и операторы Razor в ASP.NET MVC
Создаем переменную и выводим на экран во View в ASP.NET MVC
@using внутри View в ASP.NET MVC
@foreach(var item in arr) {...} внутри View в ASP.NET MVC
@DateTime.Now внутри View в ASP.NET MVC
Как узнать имя контроллера внутри View в ASP.NET MVC
Отображаем [DateTime | только Date | только Time] в нужном формате в ASP.NET MVC
Разновидности представлений (View)
Строго типизированное представление (Strongly-typed-view) в ASP.NET MVC
...
Мастер представление (Master View) с использованием @RenderBody() в ASP.NET MVC
Мастер представление (Master View) с использованием @RenderBody() и дополнительных секций @RenderSection в ASP.NET MVC
...
Частичное представление (Partial View) в ASP.NET MVC. Встраиваем частичное представление @Html.Partial("My1") и @{ Html.RenderPartial("My1");}
При нажатии submit внутри partial view происходит ajax вызов метода controller. Метод controller должен возвращать PartialView(model) | ASP.NET MVC
...
Строго типизированное частичное представление (Strongly-typed partial view) в ASP.NET MVC
Создаем папку ViewModels. Это хороший стиль программирования для передачи данных из Controller во View
Создаем папку ViewModels. Создаем свой класс в папке ViewModels. Это хороший стиль программирования для передачи данных из Controller во View. Web приложение ASP.NET MVC
Атрибуты. Используем атрибуты во ViewModels(чтобы показать кнопки, combo в представлении). Используем атрибуты в Controller (чтобы улучшить методы)
Аттрибут [Display(Name = "...")] описывается в C# классе и используется в @Html.LabelFor, @Html.DisplayNameFor в ASP.NET MVC
Аттрибут [Required(ErrorMessage = "Пожалуйста, введите название")] описывается для свойства в C# классе и требует чтобы свойство было заполнено, если не заполнено на экране ошибка ErrorMessage в ASP.NET MVC
Аттрибут [Remote("IsValidAuthor", "Home", ErrorMessage = "Enter correct author of book")] описывается для свойства в C# классе и проверяет это свойство на правильность на сервере через метод IsValidAuthor в conroller Home, если метод возвращает false, то на экране будет ошибка ErrorMessage в ASP.NET MVC
Аттрибут [HiddenInput(DisplayValue = false)] описывается в C# классе и используется в @Html.HiddenFor в ASP.NET MVC
Маршрутизация
Ссылки и перенаправления в представлении
@Html.ActionLink внутри View в ASP.NET MVC
@Html.RouteLink внутри View в ASP.NET MVC
@Url.Action внутри View в ASP.NET MVC
@Url.RouteUrl внутри View в ASP.NET MVC
@Url.Content внутри View в ASP.NET MVC
Bootstrap в MVC
Добавляем и подключаем Bootstrap (css, js файлы) в ASP.NET MVC проект
JQuery в МVС
Подключаем JQuery в ASP.NET MVC проект
С помощью JQuery получаем содержимое View (представления) в ASP.NET MVC. Пример: $.get("/Home/Index", function (data) {...}) ...
Класс AjaxExtensions в МVС (асинхронное получение данных)
Подключаем jQuery & AJAX в ASP.NET MVC проект
С помощью Ajax.ActionLink получаем содержимое View (представления) и вставляем в div в ASP.NET MVC
Объект Ajax (это класс AjaxExtensions) в ASP.NET МVС
База данных (Entity Framework) в ASP.NET MVC
Entity Framework в приложении ASP.NET MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
Аутентификация (login/register/logout)
Что такое аутентификация (login/register/logout) в ASP.NET MVC ?
Пример: Аутентификация (login/register/logout) в ASP.NET MVC используя аутентификацию форм FormsAuthentication.SetAuthCookie(model.Name, true);
Авторизация (admin/user/...)
Что такое авторизация (admin/user/...) в ASP.NET MVC ?
Пример: Авторизация (admin/user/...) в ASP.NET MVC используя провайдер ролей RoleProvider
Пишем приложение "Планирование дел, задач" в ASP.NET MVC
Создаем пустое приложение "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем библиотеки Bootstrap & jQuery в приложение "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Создаем мастер-представление (главное меню & логин кнопки используя Bootstrap) в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем контроллер "Home" и представление "Index" (главная страница в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем библиотеку Entity Framework и создаем соединиение с Базой данных в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Аутентификация (login/register/logout) в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем класс "Task" для сохранения дел, задач в базу данных в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавление nUnit в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Дополнительные темы, вопросы
Чем ASP.NET MVC лучше ASP.NET Web Forms ?
Выбор между ASP.NET Core и ASP.NET ?
Как выбрать интернет браузер чтобы в нем запускался .NET проект
Как узнать локальный адрес и порт вашего ASP.NET MVC приложения ?
Scripts\index.d.ts(8,1): error TS1008: Build:Unexpected token; 'module, class, interface, enum, import or statement' expected. Scripts\index.d.ts(8,13): error TS1005: Build:';' expected. в Visual Studio 2017 в приложении ASP.NET MVC
Error "unable to connect to web server "iis express" | ASP.NET MVC | Visual Studio 2017
Error "This site can't be reached" when run ASP.NET application | Solution: Recreate the Self-Signed HTTPS Certificate for localhost in IIS Express
WWW сайты для изучения ASP.NET MVC
Cайты для изучения ASP.NET MVC

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика