Принятый ответ здесь не описывает жизненный цикл ViewBag / ViewData.К сожалению, нет четкой документации по этому поводу.Тем не менее, исходя из этого:
http://blogs.msdn.com/b/varunm/archive/2013/10/03/understanding-of-mvc-page-life-cycle.aspx
Казалось бы, жизненный цикл:
Запрос IIS -> Маршрутизация -> Обработчик MVC -> Контроллер (с ViewData)-> View (с ViewData) -> Утилизация
Таким образом, ViewData (который просто упаковывает ViewBag) будет фактически создан с помощью ControllerContext, в то же время будет создан экземпляр TempData.Это происходит через несколько шагов после шага 4: выполняется обработчик MVC.
Позже есть интересный шаг, когда «Если у страницы есть ViewData, ViewData устанавливается» во время передачи обслуживания от контроллера к представлению.До этого данные ViewData были доступны, поэтому set не может означать создание экземпляра.Похоже, вместо этого это означает, что он передается из Контроллера (который помнит, что он недоступен для View) в ViewContext (контейнер, который обеспечивает доступ View к ViewBag / ViewData и Model).
ViewData isпредположительно удаляется одновременно с остальной частью представления.
Важно также отметить, что представления MVC визуализируются изнутри, поэтому определенный вид и любые назначения, которые он делает для ViewBag, будут происходить аналогичным образом.в порядке изнутри наружу.Это означает, что что-то, установленное на дочерней странице View, будет доступно для Layout, но добавить что-то к ViewBag в Layout и затем прочитать его на дочерней странице View. Не удастся.