PROGRAM VISUALBASIC

ASP.NET(VB.NET) MVCモデル入門~TempDataを使ってセッション情報を保持する

TempDataを使ってセッション情報を保持するプログラム

今回は、ログイン後にIDとユーザー名を画面の上部に表示するプログラムを作成します。
表示するユーザー情報は、ログアウトするまで有効になるようにします。
画面イメージは、以下のようになります。
なお、エラー処理は、処理が煩雑になるので実装していません

ログイン前の画面

vbmvc20-1
ログイン前

ログイン後の画面
画面の右上に、ID、ユーザー名、ログアウトのリンクが表示されます。

vbmvc20-2
ログイン後

新規プロジェクトの作成

新規にプロジェクトを作成します。
今回のサンプルプログラムでは、プロジェクト名を「Test8」として作成します。
プロジェクトの作成方法は、こちらの記事を参照してください。

データベースの作成

プロジェクトで使用するデータベースを作成します。
データベースは、Visual Studio付属の「SQL Server Express LocalDB」を使用します。
データベースの仕様や作成方法は、こちらの記事を参照してください。

ADO.NET Entity Data Modelの作成

データベースを作成したら、VB.NETとデータベースを接続するために、ADO.NET Entity Data Modelを作成します。
モデル名は、「TestDbModel」とします。
ADO.NET Entity Data Modelの作成方法は、こちらの記事を参照してください。

Accountクラスにアノテーションを追加

自動で作成されたAccountクラスの各プロパティに、アノテーションを追加します。

データベース操作用クラスの作成

データベースを操作するためのクラスを、「DbModel.vb」という名前で、「Data」フォルダーの配下に作成します。
「Data」フォルダーは、あらかじめ作成しておきます。
このクラスでは、ログイン画面で入力されたIDとパスワードを使って、ユーザー情報を取得する関数を作成します。
検索結果は0件か1件になるので、SQLQuery()メソッドにFirstOrDefault()メソッドを指定します。

今回はサンプルなので、テーブルから取得したデータを格納するモデルを自動で作成されたAccountクラスにしていますが、パスワードは不要なので、本来はIdとNameのみのプロパティを持ったクラスを新規に作成した方が良いです。

ログイン画面用コントローラーの作成

ログイン画面用のコントローラーを作成します。
データベースから取得したユーザー情報をTempData("Value")に格納して、以降、このデータをログアウトするまで、TempData("Value")に保持したまま使い回します。

ログイン画面用ビューの作成

ログイン画面用のビューを作成します。
このビューでは、IDとパスワードを入力させます。

表示レイアウトの編集

ビューを作成すると、自動的に「Views/Shared/_Layout.vbhtml」が作成されるので、これを以下のように編集します。

12行目から17行目で画面の上部に表示するユーザー情報を設定します。
ログインする前は、「未ログイン」と表示します。
2行目でTempData("Value")から値を取得する時に、Peek()メソッドを使ってTempData("Value")の値を保持し続けます。
Peek()メソッドを使用しない場合は、ここでTempData(”Value”)の値が破棄されてしまいます。
TempData()に関する詳しい内容は、以下のマイクロソフトの公式サイトを参照してください。

ログイン完了画面用コントローラーの作成

ログイン完了画面用のコントローラーを作成します。

ログイン完了画面用ビューの作成

ログイン完了画面用のビューを作成します。
7、8行目でTempData("Value")から値を取得していますが、ここでもPeek()メソッドを使用します。
Peek()メソッドを使用しないと、TempData("Value")の内容が破棄されてしまいます。

詳細画面用コントローラーの作成

詳細画面用のコントローラーを作成します。

詳細画面用のビューを作成

詳細画面用のビューを作成します。
詳細画面は、単にログイン完了画面から遷移するために使いたいだけなので、内容は特にありません。

ログアウト用コントローラーの作成

ログアウト用のコントローラーを作成します。
このコントローラー内で、TempData()の値をクリアします。
今回は、TempData("Value")しか使っていませんが、TempData().Clearとすると、全てのTempData()の項目が削除されます
また、ログアウト用のビューは作成せず、ログイン画面に戻ります。

スタイルシートの修正

このプロジェクトで使用するスタイルシート(Site.css)を、以下のように修正します。

32行目は、ログアウトのリンクを右端に寄せるための指定です。
floatを使うことで、インライン要素をブロック要素にして位置を指定することが出来るようになります。

RouteConfigの修正

RouteConfig.vbを修正して、ルートページをログイン画面になるように変更します。

-PROGRAM, VISUALBASIC
-, ,