【发布时间】:2019-07-23 06:17:23
【问题描述】:
Mt 教科书说 TempData 在被读取之前一直存在,这意味着它在被读取后会被销毁,但我确实在这样的视图中看到了一些代码:
@if (TempData["message"] != null)
{
<div class="alert alert-success">@TempData["message"]</div>
}
所以我一头雾水,那TempData["message"] != null不是已经访问了TempData,怎么还能在<div>中访问?
另一个问题是,假设我们有一个 XXXController 并且其中一个操作方法使用 TempData 作为:
[HttpPost]
public IActionResult Edit(Product product)
{
...
TempData["message"] = $"{product.Name} has been saved";
...
}
使用 Xunit 和 Moq 进行单元测试时,代码如下:
Mock<ITempDataDictionary> tempData = new Mock<ITempDataDictionary>();
XXXController target = new XXXController(mock.Object)
{
TempData = tempData.Object
}
为什么要初始化TempData,是不是在controller instanced创建的时候,就可以立即赋值TempData了?
【问题讨论】:
-
TempData 在多个请求中持续存在,直到被读取。 那么它将在 next 请求中不再可用。
-
这确实是两个独立的问题
-
@HansKesting 哦,你的意思是每个请求都可以使用,而不是一个请求中的每个访问?
-
@HansKesting 那么你能否回答我的第二个问题,为什么如果我不初始化它,那么单元测试会失败(空对象引用)?
-
是的,完全正确。它在读取后停止持久化。
标签: c# asp.net-core-mvc razorengine