在redirect之前设置Viewbag
是否有可能在我呼叫redirect之前设置ViewBag?
我想要类似的东西
@ViewBag.Message="MyMessage"; RedirectToAction("MyAction");
当您使用redirect时,不应使用ViewBag
,而应使用TempData
public ActionResult Action1 { TempData["shortMessage"] = "MyMessage"; return RedirectToAction("Action2"); } public ActionResult Action2 { //now I can populate my ViewBag (if I want to) with the TempData["shortMessage"] content ViewBag.Message = TempData["shortMessage"].ToString(); return View(); }
在这种情况下你可以使用TempData。 这里是对ViewBag,ViewData和TempData的一些解释。
我喜欢这个..和它为我工作…在这里我正在更改密码和成功我想设置成功消息viewbag显示在视图..
public ActionResult ChangePass() { ChangePassword CP = new ChangePassword(); if (TempData["status"] != null) { ViewBag.Status = "Success"; TempData.Remove("status"); } return View(CP); } [HttpPost] public ActionResult ChangePass(ChangePassword obj) { if (ModelState.IsValid) { int pid = Session.GetDataFromSession<int>("ssnPersonnelID"); PersonnelMaster PM = db.PersonnelMasters.SingleOrDefault(x => x.PersonnelID == pid); PM.Password = obj.NewPassword; PM.Mdate = DateTime.Now; db.SaveChanges(); TempData["status"] = "Success"; return RedirectToAction("ChangePass"); } return View(obj); }
从这里采取
概要
ViewData和ViewBag对象为您提供访问模型旁边的额外数据的方法,但是对于更复杂的数据,您可以移动到ViewModel。 另一方面,TempData专门用于处理HTTPredirect的数据,因此请谨慎使用TempData。
或者你可以使用Session来替代:
Session["message"] = "MyMessage"; RedirectToAction("MyAction");
然后随时调用它。
UPDATE
另外,正如@James在他的评论中所说的那样,为了避免不必要的垃圾数据或过时的价值,在使用该特定会话之后,可以安全地清除或清除该特定会话的价值。