2

コントローラアクションで、TempData変数のリダイレクトから変数を受け取ります

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"]; // works ok when coming from the redirect
    [..]
}

別の呼び出しのためにそのデータムを保持する必要があるため、ビューを返す前にデータムを再割り当てしようとします。

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"];
    [..]

    TempData["myVariable"] = TempData["myVariable"];
    return View();
}

レンダリングされたページからChangePasswordにPOSTリクエストをすぐに送信しますが、今回はTempData["myVariable"]がnullです。たぶん私は愚かなことをしているのですが、どうやって望みの結果を得るのですか?私はSession変数を使用したくありません(それはずっと長く持続し、Session変数の汚染を防ぐために変数がクリアされていることを手動で確認することに取り組んでいます)。フォーム(非表示の変数)を介して再投稿することもできますが、変数はサーバー側のみに保持したいと思います。

4

3 に答える 3

4

探していると思いますTempData.Keep()

于 2011-09-09T10:33:06.530 に答える
0

myVariableが重要な情報セキュリティではない場合は、非表示フィールドに永続化して(ビューを変更)、次のアクションリクエストに投稿できます。

于 2011-09-09T10:41:31.177 に答える
0

TempData は、現在のリクエストのコンテキスト内でのみ持続します。クライアントにコンテンツを返し、クライアントがポストバックしている場合、それは使用できません。あなたのオプションはかなり標準的で、基本的にはあなたが説明したとおりです:

  • フォーム変数を使用します(あなたが述べたように-それがパスワード変更フィールドである場合、それは機密である可能性があると推測しています)
  • セッション変数を使用します(あなたも述べたように!)
  • アプリケーションの別の場所 (カスタム データベース フィールドやユーザー プロファイルなど) に変数を永続化します。

個人的には、セッションプロバイダーを使用するか、可能であれば、即時のポストバックでコンテンツをクライアントに返さないようにします...

于 2011-09-09T10:32:34.167 に答える