asp.net-mvc-2 – TempData未按预期清除
|
我正在使用ASP.NET 4.0和MVC 2.0开发应用程序.如果它有任何相关性,我正在使用VS2010. 我正在使用TempData遇到并发症.我没有写原始代码,但它没有正常工作,我正在尝试解决它.我没有很多使用TempData和ViewData的经验. 我有一个索引操作如下(伪代码): public virtual ActionResult Index()
{
var vm = new IndexViewModel();
// some code here to set up the ViewModel
if (TempData.ContainsKey("Success"))
vm.Success = true;
return View(MVC.Controller.Views.Index,vm);
}
我有一个POST动作如下(伪代码): [HttpPost]
public virtual ActionResult Index(IndexViewModel vm,List<int> formData)
{
if (DoSomethingWithData(formData))
{
TempData["Success"] = true;
return RedirectToAction(MVC.Controller.ActionNames.Index);
}
TempData["Message"] = "Failed to use formData";
return View(MVC.Controller.Views.Index,vm);
}
如果vm.Success为true,则视图将发出一个表单并在其前面显示成功消息.如果它存在,它还将在TempData [“Message”]中发出消息. 我第一次来到页面时,我只得到了表单.我输入INVALID表单数据并提交它…然后我按预期的方式获得错误消息前面的表单. (我知道这里的设计很差,因为它没有重定向……而且你的刷新等用户体验很差,但是我还没有担心)这一切都很棒. 当我使用VALID表单数据时,问题就会出现.如果我提交有效的表单数据,我会按照预期的方式在页面前面显示成功消息,但如果我刷新页面,则成功消息仍然存在.事实上,如果我去网站的一个完全不同的部分并导航回来,成功的信息仍然存在.由于某种原因,重定向和读取后,tempdata仍然存在.有重定向和读取…现在不应该清楚临时数据吗? 我有理由相信我导航到的其他地方没有出于任何原因设置TempData [“成功”],但为了确保我已经导航到谷歌之类的东西,并直接回到此页面的URL,并且似乎仍然填充了TempData [“Success”]. 很明显,要么我不清楚地理解TempData应该如何运作(不足为奇),要么发生一些不寻常的事情,我根本没有经验可以看到. 欢迎任何建议! 谢谢, [编辑] 当有成功消息时,视图实际上不会发出表单…它只发出成功消息. 视图看起来或多或少像这样: <% if (TempData.ContainsKey("Message")) { %>
Emit message...
<% } %>
<% using (Html.BeginForm(MVC.Controller.ActionNames.Index,MVC.Controller.Name,FormMethod.Post,new { id = "form"})) { %>
<% if (!Model.Success) { %>
Emit form...
<% } else { %>
Emit confirmation message...
<% } %>
<% } %>
弗朗西斯科向我指出了一些我没有考虑过的东西……但事实证明,viewmodel的构造函数将Success设置为false …所以这并不奇怪.我确定TempData [“Success”]仍然是设置的(而不是愚蠢地重用成功设置为true的viewmodel)因为我已经逐步完成了代码并且它不断地进入if语句设置vm. success = true,即使刷新后也是如此. 解决方法正如我在评论中所说的那样添加这个.我建议做if (TempData["Success"] != null)
vm.Success = true;
代替 if (TempData.ContainsKey("Success"))
vm.Success = true;
…因此它被视为TempData读取.很高兴它奏效了.问候 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Asp.net 5(vnext)是否可以使用?
- 在asp.net后面的代码中创建javaScript变量
- asp.net-mvc – ASP.NET MVC切换语言,如何实现?
- asp.net – 无法加载类型’System.ServiceModel.Activation
- ASP.net会话状态服务信息
- asp.net – 分析器错误消息:无法生成代码.抛出了类型’Sys
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET 3.0子应用
- asp.net – web.config不转发到非.aspx页面上的404错误页面
- 为什么MVC而不是好的旧ASP.NET?还没有抓住为什么要走这条路
- asp.net-core – app.UseErrorHandler()可以访问错误详细信
- asp.net核心 – 如何在Asp.Net Core中注册同一个
- asp.net – 以编程方式将Textbox TemplateField列
- asp.net-mvc – ASP.NET MVC ViewModel方法 – 是
- asp.net – 在表单提交时禁用按钮
- asp.net-mvc – 如何使用带有IEnumerable的Html.
- asp.net-mvc – 如何为未经过身份验证的用户隐藏
- asp.net-mvc-4 – 如何配置MVC的样式捆绑顺序?
- asp.net – 无法加载文件或程序集“Microsoft.Sq
- asp.net-mvc – 如何将ms显示从LHS移动到RHS
- asp.net – 通过邮件发送wcf服务消费表单数据
