RedirectToAction()销毁字符串数据
本文关键字:字符串 数据 RedirectToAction | 更新日期: 2023-09-27 18:04:23
在我的控制器中我有一个字符串变量
private string notificationMessage = "";
,我想用它来复制它的内容到ViewBag.Message
,并在视图上显示该内容。
所以在编辑动作中我填充它的(notificationMessage)内容像这样
notificationMessage = "data is succ. updated!";
return RedirectToAction();
但是在重定向到索引操作之后,这个字符串变量是空的;
如何解决?
用TempData
代替ViewBag
。
这是因为RedirectToAction
向浏览器返回一个HTTP 302响应,导致浏览器对指定的动作进行GET请求。由于HTTP是无状态的,您不能简单地在一个操作中设置某些内容并在另一个操作中获取它(当它是另一个get请求时)。
你能做的是
1)传递一个querystring给你的新动作,并在下一个动作方法中检查它,并根据它显示一个消息。
return RedirectToAction("ThankYou","Account",new {msg="success"});
和你的ThankYou动作
public ActionResult ThankYou(string msg)
{
var vm=YourSuccessViewModel();
if(msg="success") // you may do a null checking before accessing this value
{
vm.Message="Saved Successfully";
}
return View(vm);
}
2)存储在临时位置,如Session/TempData。TempData是一个非常短暂的实例,您应该只在当前和后续请求期间使用它!
TempData["UserMsg"] = "Saved Successfully";
return RedirectToAction("ThankYou","Account");
在你的ThankYou
动作中,你可以读取它并根据需要显示给用户。
public ActionResult ThankYou(string msg)
{
var msg = TempData["UserMsg"] as string;
//to do : do what you want with the message and return the view.
}
会话对象是TempData对象的后备存储,它比常规会话更快地被销毁,即在后续请求之后立即销毁。