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");
必要なときにいつでも呼び出すことができます。
アップデート
また、@James がコメントで述べたように、不要なジャンク データや古い値を避けるために、使用後にその特定のセッションの値を無効にするかクリアしても安全です。