ASP.NET MVC ViewData、ViewBag 和 TempData

2025年3月17日 | 阅读 3 分钟

ASP.NET MVC 提供了三个变量,用于存储值并从控制器传递到视图。 ViewDataViewBag 类似,但 TempData 具有额外的功能。

我们将通过示例讨论每一个。


ASP.NET MVC ViewData

它是一个对象字典,源自 ViewDataDictionary 类。 我们可以使用字符串作为键来访问值。 它是类型安全的,需要进行类型转换才能获得数据类型。 它可以避免错误,并在运行时检查空引用。 它仅在当前请求期间可访问。

示例

我们正在创建一个控制器,并将视图返回到浏览器。 此控制器将 Courses ViewData 传递到视图。

控制器

视图 (View)

// Index.cshtml

输出

它向浏览器生成以下输出。

ASP View bag 1

ASP.NET MVC ViewBag

它是一个动态属性,类似于 ViewData。 它是在 .NET Framework 4.0 版本中引入的。 它用于将数据从控制器发送到视图页面。 ViewBag 可以动态地获取和设置值,这就是它被称为动态属性的原因。 它不需要类型转换,并动态转换类型。

示例

在此示例中,我们正在实现 ViewBag 属性。 控制器和一个 Index 文件如下所示。

控制器

视图 (View)

输出

Index 文件将以下输出生成到浏览器。

ASP View bag 2

ASP.NET MVC TempData

它表示一组数据,这些数据仅从一个请求持续到下一个请求。 它源自 TempDataDictionary,我们可以使用它的对象来传递数据,就像我们在 ViewData 中所做的那样。 TempData 的值仅从一个请求持续到下一个请求。 保留用于标记键以持久保存数据,以便它可以保留到下一个请求。

我们还可以使用 TempData 将数据从一个操作传递到另一个操作。 让我们看一个例子。

示例

控制器

// TempDataController.cs

视图 (View)

// Index.cshtml

输出

此 index 文件将以下输出生成到浏览器。

ASP View bag 3
下一主题ASP.Net Razor