在重定向之前设置Viewbag

dan*_*iel 114 c# asp.net-mvc

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

我想要类似的东西

@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
Run Code Online (Sandbox Code Playgroud)

Rap*_*aus 229

当你使用重定向时,你不应该使用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();
}
Run Code Online (Sandbox Code Playgroud)

  • 我想完成答案,因为我正在使用它,我遇到一个小问题,就是TempData由于某种原因是空的(在我的情况下,我只在转换时有一条消息).所以我必须进行测试if(TempData ["Message"]!= null)以避免错误. (6认同)
  • 如果重定向到其他控制器怎么办?在另一个控制器的action ViewBag中,TempData和Session都是空的! (2认同)
  • @Andrew 好吧,TempData 与特定控制器无关。也许你做了不止一个重定向,然后丢失了 TempData ?您可以使用一些代码链接到一个新问题... (2认同)

las*_*s88 11

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


RAV*_*ELA 8

我确实喜欢这个..它为我工作......在这里我正在改变密码并且在成功时我想设置成功消息到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);
    }
Run Code Online (Sandbox Code Playgroud)