RedirectToAction()销毁字符串数据

本文关键字:字符串 数据 RedirectToAction | 更新日期: 2023-09-27 18:04:23

在我的控制器中我有一个字符串变量

private string notificationMessage = "";

,我想用它来复制它的内容到ViewBag.Message,并在视图上显示该内容。

所以在编辑动作中我填充它的(notificationMessage)内容像这样

notificationMessage = "data is succ. updated!";
return RedirectToAction();

但是在重定向到索引操作之后,这个字符串变量是空的;

如何解决?

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对象的后备存储,它比常规会话更快地被销毁,即在后续请求之后立即销毁。