首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TempData[“信息”]不可靠--我做错了什么?

TempData[“信息”]不可靠--我做错了什么?
EN

Stack Overflow用户
提问于 2010-05-26 19:00:30
回答 5查看 1.9K关注 0票数 3

当用户在我的站点上做以下事情时,我使用TempDate["Message"]来显示一些更新横幅:

代码语言:javascript
复制
[AcceptVerbs(HttpVerbs.Post), Authorize(Roles = "Admins")]
public ActionResult Delete(int id)
{
    _Repo.DeletePage(id); // soft-delete

    TempData["Message"] = "Page deleted!";
    return RedirectToAction("Revisions", "Page", new { id = id });
}

然后在我的主页上我有这样的信息:

代码语言:javascript
复制
<%-- message box (show it only if it contains a message) --%>
<% string Message = (TempData["Message"] ?? ViewData["Message"]) as string; 

   if(!string.IsNullOrEmpty(Message)){
       %>
       <div id="message"><%:Message %></div>
   <% }

   TempData["Message"] = null; ViewData["Message"] = null; %>

我点击了TempData和ViewData,因为我在某个地方读到TempData应该用于重定向,而ViewData则应该用于重定向。

的问题是:经常不会马上出现消息。有时,只需在站点的不同部分单击一两次,消息就会出现。很奇怪。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-28 08:11:00

您应该验证在代码中使用TempData["Message"]的所有位置。对应于ASP.NET MVC does browser refresh make TempData useless?,您只能读取TempData["Message"]一次(也请参阅http://forums.asp.net/p/1528070/3694325.aspx)。在第一次使用TempData["Message"]期间,TempData["Message"]将从内部TempDataDictionary中删除。

也许最好只在TempData["Message"]控制器的Revisions操作中使用Page,而不是在母版页或视图中使用Page

票数 2
EN

Stack Overflow用户

发布于 2010-06-28 14:56:05

TempData不打算将数据传递给视图,因此为此使用了名称ViewData。事实上,我根本想不出在视图定义中使用TempData的原因.

TempData的一个非常常见的用法是在重定向时在控制器操作之间传递信息(例如,上面示例中的修订操作将能够使用您的TempData["Message"]变量)。

这是PRG编写MVC交互(后-重定向-获取)的方法中的常见做法,因为在对Get进行重定向时,通常需要从初始目标操作传递信息。下面是一个示例,说明这在Get中是如何有用的,我通常只是默认使用一个新的视图模型,除非在TempData中已经从重定向中传递了一个视图模型:

代码语言:javascript
复制
public ActionResult System() {
   SystemAdminVM model = (SystemAdminVM)TempData["screenData"] ?? new SystemAdminVM();

还有一件事:我看到您在视图中显式地清除了TempData和ViewData字典条目。你不需要这么做,因为他们已经到了生命的尽头.

编码愉快!

票数 2
EN

Stack Overflow用户

发布于 2010-06-21 20:17:11

如果您使用的是TempData,那么应用程序的行为就是应该使用ViewData的行为。

只有当控制器进行重定向时,才需要再次检查是否要将状态反馈存储在TempData中。否则,您应该使用ViewData。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2915882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档