ASP.NET MVC:跨多个请求保留 TempData
当我执行重定向时,我需要传递一些值。 我想使用 TempData 来完成此任务,但遇到了问题。
我使用一个特殊的控制器来生成动态 JavaScript。 例如,可能有这样的脚本标签:
<script type="text/javascript" src="/Resource/Script/Login.js"></script>
...但没有脚本文件“Login.js”。 相反,正在调用 ResourceController 的 Script 操作:
public class ResourceController : Controller {
public ActionResult Script(string id) {
// set script = some code
return JavaScript(script);
}
}
问题是,这会占用下一个请求,这意味着我无法使用 TempData 从具有动态脚本的页面进行重定向。 脚本操作(或整个 ResourceController)是否可以选择不使用 TempData,从而使其可用于下一个“真实”请求?
先感谢您!
There are values I need to pass when I perform redirects. I want to use TempData to accomplish this, but have encountered an issue.
I use a special controller to generate dynamic JavaScripts. For example, there might be a script tag like this:
<script type="text/javascript" src="/Resource/Script/Login.js"></script>
...but there is no script file "Login.js." Instead, the Script action of the ResourceController is being called:
public class ResourceController : Controller {
public ActionResult Script(string id) {
// set script = some code
return JavaScript(script);
}
}
The problem is, this eats up the next request, meaning that I can't use TempData to redirect from a page with a dynamic script. Is there any way the script action (or the ResourceController as a whole) can choose not to consume the TempData, allowing it to be available for the next "real" request?
Thank you in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Asp.Net 团队在 MVC 2 中通过引入 TempData.Keep() 消除了这一难题,这确保所有 TempData 项都被标记为可以再处理一次请求。 从您不希望使用 TempData 的所有操作中调用此方法。
请阅读 Jacques Eloffs 博客文章中引入 Keep() 的基本原理
MSDN 文档中的 Keep()
The Asp.Net team removed this pain in MVC 2, by introducing TempData.Keep(), which makes sure all TempData items are tagged to live for one more request. Call this from all actions you want not to eat TempData.
Read the rationale behind introducing Keep() in Jacques Eloffs blog post
Keep() in MSDN docs
放置该行
您可以在视图中使用 TempData 之后
。 本文也可能对您有用: ASP.NET MVC TempData 确实是 RedirectData
You could place the line
after using TempData in view.
This article could also be useful for you: ASP.NET MVC TempData Is Really RedirectData
会话在多个请求之间保留。
Session is preserved between multiple requests.
让您的控制器超类型覆盖 ExecuteCore,这会清除 TempData。 我并不是说这是一个好主意......
Have your controller supertype override ExecuteCore, which clears TempData. I'm not saying this is a good idea...
为什么不创建一个 PreserveTempDataAttribute 来装饰您的脚本操作。 如果 TempData 不为空,它可以重新分配它。
Why not create a PreserveTempDataAttribute that you can decorate your Script action with. It can re-assign the TempData if it is not null.