Я недавно обновил свой веб-сайт до более новых версий .Net и MVC и обнаружил, что одно из моих представлений было сбой после слов. Сбой произошел при попытке добавить значение в словарь ViewData перед передачей его в частичное представление. Там сказано, что предмет с таким же ключом уже существует.
Изучив его, я смог воссоздать очень простой пример, который ведет себя по-разному, когда сайт ссылается на System.Web.Mvc версии 5.2.2.0 и System.Web.Mvc версии 5.2.3.0. Текст моего взгляда:
@{ ViewBag.Name = "Value"; }
@{var version = typeof(Controller).Assembly.GetName().Version;}
Version: @version has ViewBag in ViewData: @Html.ViewData.ContainsKey("Name")
Я скопировал одно и то же представление в 2 разных проекта, каждый из которых ссылался на свою версию MVC. Это был вывод:
Испытательная площадка 1: Version: 5.2.2.0 has ViewBag in ViewData: False
Испытательная площадка 2: Version: 5.2.3.0 has ViewBag in ViewData: True
Похоже, что в MVC 5.2.3 элемент, добавленный в ViewBag, отображается в словаре Html.ViewData, а в MVC 5.2.2 - нет.
Из замечаний к выпуску для 5.2.3 я обнаружил только ссылку на исправление ошибки, связанной с ViewData, подробно здесь .
Предоставленная информация не помогает мне понять, что изменилось, или ожидается ли это изменение:
Выпуск 2085 касался того факта, что MVC скопировал ViewData для частичных представлений и шаблонных помощников.
У меня вопрос: если Microsoft четко задокументировала или объяснила это изменение в поведении, и могу ли я с уверенностью предположить, что элемент в ViewBag будет частью словаря ViewData в будущем.