0

コントローラー内に文字列変数があります

private string notificationMessage = "";

ViewBag.Messageコンテンツをコピーしてビューに表示するために使用したい。

したがって、編集アクション内に、次のような (notificationMessage) コンテンツを入力します

notificationMessage = "data is succ. updated!";
return RedirectToAction();

しかし、Index アクションへのリダイレクト後、この文字列変数は空です。

これをどのように解決できますか?

4

2 に答える 2

4

TempDataの代わりに使用してくださいViewBag。リクエスト間で持続します。

于 2013-03-18T12:28:18.897 に答える
3

これはRedirectToAction、ブラウザにHTTP 302応答を返すため、ブラウザは指定されたアクションに対してGETリクエストを実行します。HTTPはステートレスであるため、あるアクションで何かを設定して別のアクションで取得することはできません(別のGETリクエストの場合)。

あなたにできることは

1)クエリ文字列を新しいアクションに渡し、次のアクションメソッドでそれを確認し、それに応じてメッセージを表示します。

return RedirectToAction("ThankYou","Account",new {msg="success"});

そしてあなたのThankYouアクションで

public ActionResult ThankYou(string msg)
{
  var vm=YourSuccessViewModel();
  if(msg="success") // you may do a null checking before accessing this value
  {
    vm.Message="Saved Successfully";
  }
  return View(vm);  
}

2) Session/TempDataのような一時的な場所に保存します。TempDataは非常に短期間のインスタンスであることが意図されており、現在および後続のリクエスト中にのみ使用する必要があります。

TempData["UserMsg"] = "Saved Successfully";
return RedirectToAction("ThankYou","Account");

アクションでは、ThankYouそれを読んで、必要に応じてユーザーに表示できます。

public ActionResult ThankYou(string msg)
{
   var msg = TempData["UserMsg"] as string; 
   //to do  : do what you want with the message and return the view.
}

セッションオブジェクトはTempDataオブジェクトのバッキングストアであり、通常のセッションよりも迅速に、つまり後続のリクエストの直後に破棄されます。

于 2013-03-18T12:38:21.530 に答える