Задать режим просмотра перед перенаправлением

Можно ли установить ViewBag до того, как я вызову перенаправление?

Мне нужно что-то вроде

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

Ответ 1

Когда вы используете перенаправление, вы не должны использовать 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();
}

Ответ 2

Вы можете использовать TempData в этой ситуации. Здесь есть некоторые пояснения к ViewBag, ViewData и TempData.

Ответ 3

Мне понравилось... и его работа для меня... здесь я меняю пароль и на успех Я хочу установить сообщение об успешном просмотре для отображения в представлении на экране.

    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);
    }

Ответ 4

Взято отсюда

Резюме

Объекты ViewData и ViewBag предоставляют вам способы доступа к этим дополнительным фрагментам данных, которые идут вместе с вашей моделью, однако для более сложных данных вы можете перейти к ViewModel. С другой стороны, TempData специально предназначен для работы с данными по переадресации HTTP, поэтому не забудьте соблюдать осторожность при использовании TempData.

Ответ 5

Или вы можете использовать Session для альтернативы:

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

а затем вызовите его, когда вам нужно.

UPDATE

Кроме того, как сказал @James в своем комментарии, было бы безопасно аннулировать или очистить значение этого конкретного сеанса после его использования, чтобы избежать нежелательных нежелательных данных или устаревшего значения.