根据我的阅读,放入TempData的信息将用于当前请求和下一个请求(以便您可以跨重定向传递信息)。问题是,如果我浏览到不重定向的控制器操作,TempData中的信息仍将存在于下一个请求中。我正在使用TempData存储显示给用户的信息性消息,所以现在我也在第二个屏幕上显示第一个屏幕的消息。
在控制器生命周期中是否有足够的时间在TempData不再使用后清除它?
答案 0 :(得分:7)
Use ViewData instead of TempData if you are not redirecting。您永远不需要手动清除TempData。如果您只在重定向时使用它,它将在您正确的时间自动清除。
答案 1 :(得分:0)
如果您不使用POST-REDIRECT-GET,我认为您应该使用ViewData。但如果你真的需要上面描述的行为,你应该创建自己的自定义TempData Provider:
public class YourTempDataProvider : SessionStateTempDataProvider
{
public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
{
bool redirecting = ...
if(redirecting)
{
base.SaveTempData(controllerContext, values);
}
}
}
答案 2 :(得分:0)
除了自定义TempDataProvider之外,我不会在这里寻找某个地方。但这很棘手。如果您想要其他控制器中的常规行为怎么办?我现在给YAGNI这个,然后把它清理出来,把它清理出来。当你注意到一个模式时,你可以把它拉到一些常见的地方。