3

誰かを登録するコントローラーが 1 つあり、成功した場合は別のコントローラー ビューにメッセージを表示する必要があるとします。

   [HttpPost]
   public ActionResult Register(RegisterModel model)
   {
       string msg = db.Register(model) 

       // Assuming msg contains "You have been succesfully registered" 
       // How do I display that on the Dashboard view??

       return RedirectToAction("Index", "Dashboard");
   }

メッセージまたは一連のメッセージをダッシュ​​ボード コントローラーに渡す最良の方法は何ですか?? オブジェクトのリストを独自のプロパティ(obj.Status && obj.Message のようなもの)
で渡すことができればさらに良いでしょう。

4

2 に答える 2

2

TempDataプロパティを使用できます。これにより、1 つのリクエストのデータが保持されるため、リダイレクトでこれにアクセスできるようになります。

TempData["MyObject"] = new MyObj
{
    prop1 = "Test",
    prop2 = "Prop"
}

その後、次のようにアクセスできます。

var myObj = TempData["MyObject"] as MyObj;

また

var myObj = (MyObj)TempData["MyObject"];

拡張メソッドを作成することもできます:

public MyObj GetMyObj(this TempDataDictionary tmpData)
{
    return (MyObj)tmpData["MyObject"];
}

次に、次の方法でアクセスします。

var myObj = TempData.GetMyObj();
于 2013-06-12T06:12:49.463 に答える
1

この目的には、TempData ディクショナリを使用することをお勧めします。

[HttpPost]
public ActionResult Register(RegisterModel model)
{
   string msg = db.Register(model) 

   TempData["Message"] = "You are registered!";

   return RedirectToAction("Index", "Dashboard");
}

TempData は ViewData として使用できますが、内部的には Session に存在し、MVC 自体が単一のリダイレクト後にクリーンアップを行います。

唯一のことは、Web ファーム (複数の Web サーバー) を使用する場合、同じストレージ (通常はデータベース) を使用するようにセッションを適切に構成する必要があるということです。

この質問にも議論があります

于 2013-06-12T06:09:04.143 に答える