.NET TIPS [ASP.NET MVC]リダイレクトの前後でデータを共有するには?[3.5、C#、VB]山田 祥寛2010/02/18 |
![]() |
|
Webアプリケーションでは、リダイレクト処理の前後で一時的にデータを維持したいというのは、よくあるケースだ。
例えば、「連載:ASP.NET MVC入門 第2回 スキャフォールディング機能で軽々DB連携アプリケーション」で作成したBook/Createアクションを例に考えてみよう。Book/Createアクションは、SQL Server上のBookテーブルに対して書籍情報を登録するためのアクションである。この際、前掲の記事の例では、書籍情報の登録に成功すると、そのまま一覧画面(Book/Indexアクション)にリダイレクトしていただけであったが、そのリダイレクト先で「書籍……の登録に成功しました。」のようなメッセージを表示できると、エンド・ユーザーにも処理の成功がはっきりと伝わり、より好ましい。
下の画面はその実行例である。
![]() |
![]() |
[作成]ボタンをクリック |
![]() |
![]() |
書籍の新規登録時に成功メッセージを表示 |
このような処理を実装するために、これまでであればセッションを利用していたかもしれない。しかしこの場合は、不要になったセッションを即座に破棄するという仕組みを自分で実装しなければならない。ささいなことではあるが、たかがメッセージを表示するためだけに、わざわざコードを記述しなければならないというのは、いかにも面倒なことだ。
このような状況で活用できるのが、TempDataDictionaryクラス(System.Web.Mvc名前空間)だ。TempDataDictionaryクラスは、その名のとおり、一時的なデータ(以下、一時データ)を保存するためのクラスである。「一時的」とはややあいまいな表現である。もっと具体的にいうならば、TempDataDictionaryクラスとは、
現在のリクエストと次のリクエストでのみ保持できるデータ
を管理するクラスである。
TempDataDictionaryクラスを利用することで、リダイレクト前後でのみ維持したい(使用後は即座に削除したい)データを手軽に受け渡しできるようになる。
それではさっそく、具体的な例を見てみよう。本稿で紹介するのは、冒頭の画面で示したような成功メッセージを表示させるためのサンプルである。本稿では、書籍情報の登録/一覧表示そのもののコード(Book/Index、Book/Createアクション)については説明を割愛するので、こちらについては前述の記事も併せて参照されたい。
[参考]一時データの正体 |
一時データというと、何やら特殊なものにも思われるかもしれないが、内部的には単なるセッション情報に過ぎない。要は、自動的に削除されるべくフレームワークが管理している特別なセッションというわけだ。そのため、一時データの機能を利用するには、セッション機能も有効になっている必要があるので、注意してほしい。 |
1. アクション・メソッドを編集する
Book/Createアクションに対して、以下のコードを追加する。追記部分は太字で表している。
|
||
一時データ(成功メッセージ)を登録するためのコード(上:BookController.cs、下:BookController.vb) |
TempDataDictionaryオブジェクトは、Controller.TempDataプロパティ経由でアクセスできる。つまり、TempDataDictionaryオブジェクトに値をセットするには、以下の構文でコードを記述すればよい。
|
||
[構文]TempDataプロパティ(値の設定)(上:C#、下:VB) |
2. ビュー・スクリプトを編集する
一時データを表示するために、ビュー・スクリプト(Book/Index.aspxファイル)も編集しておこう。追記部分は太字で表している。
|
||
一時データを表示するためのビュー・スクリプト(Book/Index.aspx。上:C#、下:VB) |
一時データを取得するには、TempDataプロパティにアクセスするだけだ。(ビュー変数の場合と同様)出力に当たっては、Html.Encodeメソッドでエンコード処理を施すのを忘れないよう、注意してほしい。
|
||
[構文]TempDataプロパティ(値の取得)(上:C#、下:VB) |
以上を理解できたら、実際にサンプルを起動してみよう。データの登録に成功すると、冒頭の画面のように成功メッセージが表示されることを確認してほしい。また、Book/Indexアクションにもう一度アクセスすると、今度はメッセージが表示されなくなっている(一時データ)が破棄されることも確認してほしい。
利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET MVC 使用ライブラリ:TempDataDictionaryクラス(System.Web.Mvc名前空間) |
![]() |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
|
|
|
![]() |