Вывод динамических данных
Например, перед нами стоит задача выводить приветствие в зависимости от времени суток. Т.е. до обеда — «Доброе утро», после обеда — «Добрый день», и т.д. Для того, чтобы решить эту задачу наиболее грамотным образом, нам нужно передавать данные из контроллера в представление. Это можно сделать с помощью объекта ViewBag, который является членом базового класса ControllerBase.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace PartyInvites.Controllers { public class HomeController : Controller { public ViewResult Index() { int hour = DateTime.Now.Hour; if(hour >= 4 && hour < 12) ViewBag.Greeting = "Доброе утро"; if(hour >= 12 && hour < 18) ViewBag.Greeting = "Добрый день"; if(hour >= 18 && hour < 22) ViewBag.Greeting = "Добрый вечер"; if(hour >= 22 || hour < 4) ViewBag.Greeting = "Доброй ночи"; return View(); } } }
Сразу остановлюсь на условной конструкции, чтобы не было недопонимания. Кто-то может подумать: «Фу, какой код, его же можно оптимизировать, добавив сюда else.» Да, соглашусь, код можно оптимизировать так, чтобы процессорное время тратилось меньше. Но, во-первых, процессор не взорвётся от прохода по четырём строчкам. Во-вторых, добавлять сюда else — это бред полнейший, потому что читать это будет невозможно. Нет, возможно, конечно, но я не хочу сидеть и компилировать в голове код. Код пишется в первую очередь для разработчика, и сейчас он очень понятен. Если хочется его оптимизировать, то нужно написать функцию.
[функция]
Теперь вернёмся к объекту ViewBag. Как видите, в нём можно устанавливать произвольные свойства. Это динамический объект, так что свойство Greeting не существует вплоть до момента, когда ему присваивается значение. Ну и, соответственно, засовывать в него можно всё, что угодно.
Теперь перейдём в Index.cshtml. Чтобы получить значение, которое вычислится в контроллере, нужно сослаться на свойство ViewBag.Greeting.
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <p>@ViewBag.Greeting! [абзац сгенерирован в представлении]</p> </div> </body> </html>
Давайте запустим приложение. Что произошло? В контроллере Home произошёл вызов метода Index(). Этот метод, в свою очередь, вызвал метод View(). Инфраструктура MVC нашла файл представления Index.cshtml и запросила у движка Razor синтаксический анализ содержимого этого файла. Движок Razor нашёл вот это выражение и вставил вместо него значение, которое было вычислено в методе действия Index().
В следующем видео покажу, как работать с системой управления версиями.