Можно ли установить ViewBag до того, как я вызову перенаправление?
Мне нужно что-то вроде
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
Можно ли установить ViewBag до того, как я вызову перенаправление?
Мне нужно что-то вроде
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
Когда вы используете перенаправление, вы не должны использовать 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.
Мне понравилось... и его работа для меня... здесь я меняю пароль и на успех Я хочу установить сообщение об успешном просмотре для отображения в представлении на экране.
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 специально предназначен для работы с данными по переадресации HTTP, поэтому не забудьте соблюдать осторожность при использовании TempData.
Или вы можете использовать Session для альтернативы:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
а затем вызовите его, когда вам нужно.
UPDATE
Кроме того, как сказал @James в своем комментарии, было бы безопасно аннулировать или очистить значение этого конкретного сеанса после его использования, чтобы избежать нежелательных нежелательных данных или устаревшего значения.