ASP.NET MVC TempData 用于错误请求
我使用 TempData 在重定向期间保留 ModelState(使用 MvcContrib 技术)。这很好用。然而,在极少数情况下,用户会中止请求,然后立即触发另一个请求(例如,快速单击另一个菜单项)。这会导致 ModelState 错误出现在该页面上,而该页面不属于该页面。
问题是 TempData 存储在 Session 中。这意味着任何请求都可以获取它,例如第一个到达服务器的请求。
有任何已知的解决方法吗?例如,将“目标页面”与保存的 ModelState 一起保留在 TempData 中。
I use TempData to keep ModelState during redirects (using MvcContrib technique). This works fine. However, in rare cases, user aborts request and then immediate fires another (e.g. quickly clicks on another menu item). This causes ModelState errors to appear on that page, for which it does not belong.
The problem is that TempData is stored in Session. This means, ANY request can grab it, e.g. the one that comes first to the server.
Are there any known workarounds? E.g. keep "destination page" in the TempData along with saved ModelState.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来,
TempData
应该仅用于立即重定向的操作中。例如:您应该避免将某些内容存储到 TempData 中并呈现视图:
使用 Session 来实现您正在寻找的内容或添加一些唯一的 ID 来允许您识别正确的请求。
另一种可以代替 TempData 的常见技术是 在客户端上序列化模型(如果愿意的话,可以认为是一种 ViewState)。
In my opinion
TempData
should only be used in actions that redirect immediately. For example:You should avoid storing something into the TempData and render a view:
Use Session to achieve what you are looking for or add some unique ID that allow you to identify the correct request.
Another common technique you could use instead of
TempData
is to serialize the model on the client (a sort of a ViewState if you will).