Зачем нам ViewBag
и ViewData
, если они делают одно и то же в ASP.NET Core MVC? Есть ли что-то, что ViewBag
может и ViewData
не может, или наоборот?
Какой-то конкретный сценарий, когда я должен предпочесть один другому?
Они похожи, но основное отличие состоит в том, что ViewBag использует динамические типы, что позволяет использовать менее сложный синтаксис.
ViewBag.Example=DateTime.Now;
<p>Result: ViewBag.Example.Year </p>
Против этого то же самое с ViewData может быть:
ViewData["Example"]=DateTime.Now;
<p>Result: @((ViewData["Example"] As DateTime).Year) </p>
Таким образом, с ViewData вам нужно приведение, и вы можете получить ошибки при выполнении «переименования», и у вас не будет помощи, например, Intellisense.
Кроме того, он кажется «медленнее» (но не настолько, чтобы быть проблемой). Пример: Разница в производительности ViewBag и ViewData в MVC?
Это означает, что если мы хотим скорости, мы должны использовать ViewData, а если мы используем простоту использования, мы должны использовать ViewBag.
Да, можно сказать, что ViewBag — это обертка над ViewData, хотя разница в производительности почти не имеет значения,
ViewData — это словарь объектов. ViewBag — это динамическое свойство, которое может устанавливать и получать значения динамически и может добавлять любое количество дополнительных полей без преобразования их в строго типизированные. все они используются для передачи данных от контроллера к просмотру