138

是否可以ViewBag在我调用重定向之前设置?

我想要类似的东西:

@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
4

5 回答 5

270

使用重定向时,不应使用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();
}
于 2013-01-24T09:23:51.717 回答
15

在这种情况下,您可以使用 TempData。 下面是对 ViewBag、ViewData 和 TempData 的一些解释。

于 2013-01-24T09:24:08.233 回答
12

我确实喜欢这个……它对我有用……在这里我正在更改密码,成功后我想将成功消息设置到 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);
    }
于 2016-02-18T13:21:51.697 回答
3

取自这里

概括

ViewData 和 ViewBag 对象为您提供了访问模型旁边的那些额外数据的方法,但是对于更复杂的数据,您可以向上移动到 ViewModel。另一方面,TempData 专门用于处理 HTTP 重定向上的数据,因此请记住在使用 TempData 时要小心。

于 2016-05-10T08:05:32.500 回答
-3

或者您可以使用 Session 替代:

Session["message"] = "MyMessage";
RedirectToAction("MyAction");

然后在需要时调用它。

更新

此外,正如@James 在他的评论中所说,在您使用该特定会话后,可以安全地取消或清除它的值,以避免不需要的垃圾数据或过时的值。

于 2013-01-24T09:21:57.907 回答