43
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateUser([Bind(Exclude = "Id")] User user)
{
        ...
        db.SubmitChanges();
        ViewData["info"] = "The account has been created.";
        return RedirectToAction("Index", "Admin");
}

これは、redirectToAction の後にビューデータに「info」テキストを保持しません。この問題を最もエレガントな方法で回避するにはどうすればよいですか?

私の現在のアイデアは、[NonAction] に Index コントローラ アクションからのものを配置し、Index アクションと CreateUser アクションの両方からそのメソッドを呼び出すことですが、もっと良い方法があるはずだと感じています。

ありがとう。

4

5 に答える 5

89

使用できますTempData

TempData["info"] = "The account has been created.".

TempDataはまさにこの状況のた​​めに存在します。Session をストレージとして使用しますが、2 回目の応答後は存在しません。

MSDN から:

TempDataDictionary オブジェクトの一般的な用途は、アクション メソッドが別のアクション メソッドにリダイレクトするときに、アクション メソッドからデータを渡すことです。たとえば、アクション メソッドは、RedirectToAction メソッドを呼び出す前に、コントローラーの TempData プロパティ (TempDataDictionary オブジェクトを返す) にエラーに関する情報を格納する場合があります。次に、次のアクション メソッドでエラーを処理し、エラー メッセージを表示するビューをレンダリングできます。

于 2009-08-04T08:52:42.710 に答える
13

「this」リクエスト中にViewDataデータにアクセスできるようにする必要がある場合に使用します。Viewデータが「次の」リクエスト用である場合は、「TempData」を使用します(たとえば、POST-REDIRECT-GETデザインパターン)。

于 2009-08-04T09:00:17.593 に答える
2

これが複数回必要な場合は、tempdata を viewdata にエクスポート/インポートする ActionFilterAttributes を作成することをお勧めします。この方法で ModelState を渡すこともできます (ここでデモ- #13)。そのコードを少し調整すれば、クリーンなソリューションが得られると思います。

于 2009-10-26T14:52:48.910 に答える