Respostas:
Quando você usa o redirecionamento, não deve usar ViewBag
, masTempData
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();
}
Você pode usar o TempData nessa situação. Aqui está uma explicação para o ViewBag, ViewData e TempData.
Eu fiz assim ... e está funcionando para mim ... aqui estou alterando a senha e, com sucesso, quero definir a mensagem de sucesso como viewbag para exibir em exibição ..
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);
}
Resumo
Os objetos ViewData e ViewBag oferecem maneiras de acessar esses dados extras que acompanham seu modelo; no entanto, para dados mais complexos, você pode passar para o ViewModel. O TempData, por outro lado, é voltado especificamente para trabalhar com dados em redirecionamentos HTTP, portanto, tenha cuidado ao usar o TempData.
Ou você pode usar a Sessão como alternativa:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
e depois ligue sempre que precisar.
ATUALIZAR
Além disso, como o @James disse em seu comentário, seria seguro anular ou limpar o valor dessa sessão específica depois de usá-la para evitar dados indesejados indesejados ou valor desatualizado.