ViewData
就像ViewBag
。仅当您想要将数据从控制器传输到视图时才使用它。为此我总是更喜欢视图模型。
要跨组件传输数据,您有以下两个选项:
Using TempData
字典代替ViewData
字典:您需要安装以下软件包
Install-Package Microsoft.AspNetCore.Mvc.ViewFeatures
In your Startup
类,添加这一行
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
to your ConfigureServices
方法。我用CookieTempDataProvider
作为实施ITempDataProvider
但你可以使用SessionStateTempDataProvider
.
将数据存储到TempData
字典你使用这个代码:
this.TempData["data"] = "my value";
从中检索数据TempData
你使用这个代码:
var data = this.TempData["data"];
要在组件视图中使用它:
@this.TempData["data"]
Using HttpContext.Items
字典:没有要安装的包。在您的视图组件类中,将数据存储在HttpContext.Items
像这样的字典:
this.HttpContext.Items["data"] = "my value";
并通过执行以下操作访问存储的数据:
var data = this.HttpContext.Items["data"];
在组件视图中,您可以通过执行以下操作来获取存储的数据:
@this.Context.Items["data"]
和...之间的不同TempData
and HttpContext.Items
: 之间的主要区别HttpContext.Items
and TempData
字典是:
-
HttpContext.Items
当请求结束时被清除。
- 默认情况下
TempData
读取数据时清零。要保留数据,您需要显式调用TempData.Keep()
- 使用时您可以轻松测试您的视图组件
TempData
因为它是一个类型的接口ITempDataDictionary
可以毫无困难地嘲笑它。