ASP.NET MVC:在执行控制器方法后清除TempData

时间:2009-05-22 16:25:45

标签: asp.net-mvc

根据我的阅读,放入TempData的信息将用于当前请求和下一个请求(以便您可以跨重定向传递信息)。问题是,如果我浏览到不重定向的控制器操作,TempData中的信息仍将存在于下一个请求中。我正在使用TempData存储显示给用户的信息性消息,所以现在我也在第二个屏幕上显示第一个屏幕的消息。

在控制器生命周期中是否有足够的时间在TempData不再使用后清除它?

3 个答案:

答案 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这个,然后把它清理出来,把它清理出来。当你注意到一个模式时,你可以把它拉到一些常见的地方。