asp.net-mvc-2 - TempData ["message"] 不可靠——我做错了什么?

标签 asp.net-mvc-2 asp.net-4.0 tempdata

当用户在我的网站上执行以下操作时,我使用 TempDate["Message"] 显示小更新横幅:

[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 });
}

然后在我的母版页中我有这个:

<%-- 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 应该用于其他情况。

问题是:消息通常不会立即显示。有时,需要在网站的不同部分单击一两次才能显示该消息。这很奇怪。

有什么想法吗?

最佳答案

您应该验证所有使用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"] 会更好仅在 RevisionsPage的行动 Controller 而不是母版页内或 View 内。

关于asp.net-mvc-2 - TempData ["message"] 不可靠——我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2915882/

相关文章:

asp.net-mvc - ASP.NET MVC 2 中的自定义用户

asp.net-mvc - 使用数据注释的 MVC 验证 - 模型类或 View 模型类?

c# - 'Using' 必须以匹配的 'End Using' 结尾

.net - 如何从 ASP.NET 检测 .NET 4?

asp.net - 阻止访问 aspx 文件并仅允许通过路由访问?

asp.net - 在重定向中使用 Asp.Net MVC TempData 时是否可能出现 "race condition"?

viewmodel - ASP.NET MVC 3 中的动态 TempData

c# - CaSTLe 温莎 Controller 工厂和 RenderAction

asp.net-mvc - MVC 3 临时数据容器的缺点

c# - 从 aspx 页面访问代码隐藏列表