2

当我执行重定向时,我需要传递一些值。我想使用 TempData 来完成此操作,但遇到了问题。

我使用一个特殊的控制器来生成动态 JavaScript。例如,可能有这样的脚本标签:

<script type="text/javascript" src="/Resource/Script/Login.js"></script>

...但没有脚本文件“Login.js”。相反,正在调用 ResourceController 的脚本操作:

public class ResourceController : Controller {
    public ActionResult Script(string id) {
        // set script = some code
        return JavaScript(script);
    }
}

问题是,这会占用下一个请求,这意味着我不能使用 TempData 从具有动态脚本的页面重定向。脚本操作(或整个 ResourceController)是否可以选择不使用 TempData,使其可用于下一个“真实”请求?

先感谢您!

4

5 回答 5

8

Asp.Net 团队通过引入 TempData.Keep() 消除了 MVC 2 中的这种痛苦,它确保所有 TempData 项都被标记为存在一个请求。从您不想吃 TempData的所有操作中调用它。

阅读Jacques Eloffs 博客文章中引入 Keep() 背后的基本原理

MSDN 文档中的 Keep()

于 2011-05-25T08:09:34.910 回答
5

你可以把线

<script type="text/javascript" src="/Resource/Script/Login.js"></script>

在视图中使用 TempData 后。

这篇文章也可能对您有用:ASP.NET MVC TempData Is RedirectData

于 2009-05-27T09:07:03.863 回答
4

在多个请求之间保留会话。

于 2009-05-27T09:02:27.757 回答
2

让您的控制器超类型覆盖 ExecuteCore,这会清除 TempData。我不是说这是个好主意...

protected override void ExecuteCore()
{
    string actionName = RouteData.GetRequiredString("action");
    if (!ActionInvoker.InvokeAction(ControllerContext, actionName))
    {
        HandleUnknownAction(actionName);
    }
}
于 2009-05-27T11:02:47.127 回答
0

为什么不创建一个 PreserveTempDataAttribute 来装饰您的脚本操作。如果它不为空,它可以重新分配 TempData。

于 2010-08-11T14:05:15.487 回答