为什么我们有 ViewBag 和 ViewData,如果它们在 ASP.NET 核心 MVC 中做同样的事情

Why do we have ViewBag and ViewData, if they are doing the same thing in ASP.NET Core MVC

如果 ViewBagViewData 在 ASP.NET 核心 MVC 中做同样的事情,为什么我们会有它们?有什么是 ViewBag 可以做而 ViewData 不能做的 - 反之亦然吗?

有什么具体情况我应该在什么时候更喜欢一个?

它们很相似,但主要区别在于 ViewBag 使用 dinamyc 类型,允许使用不太复杂的语法。

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 vs ViewData performance difference in MVC?