【T5b】モデルとデータベースの連携(後編)(3/8)
プロジェクトタイプ | (注意: 本文参照) |
---|---|
プロジェクト名 | T5b |
ソリューション名 | PIT5 |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
5b-3. データモデル操作のためのコントローラー/ビューの作成
ここまででC#のコード内でデータモデルの読み取り,作成,編集,削除といった操作(いわゆるCRUD操作)をする準備が整った. 今回はこれらをウェブブラウザ上で行うためのコントローラーおよびビューを作成する. なおこのような読み取り,作成,編集,削除のためのコントローラーとビューは Visual Studio などを用いて 自動生成することが可能 であるが,今回は学習のためにすべてを手動で作成することにする.
今回はモデルクラスStudent
を操作するためのコントローラーなので,コントローラーの名前としては「Student s」(複数形になっていることに注意)という
名前を採用することにする.つまり「 Students コントローラー」をこれから作成する.したがって,チュートリアル【T1c】で説明した通り,
コントローラーの名称は Students ,実際のクラスの名称はStudentsController
クラスとなる.注意する点は, コントローラー名とモデルクラスの名前は
基本的に無関係である ことである.Student
クラスを操作するコントローラーであるからと言って,今回の様に
という名称にする必要はないが,このような名前付けは ASP.NET Core ではよく用いられることを知っておこう.モデルクラスの複数形
コントローラー
それでは実際に Students コントローラーを作成しよう.プロジェクト内の Controllers フォルダを右クリックし「追加」→「コントローラー」をクリックしよう.
「MVC コントローラー - 空」を選択して「追加」ボタンをクリックし,
ファイル名にStudentsController
(.csは省略可能)と入力し「追加」ボタンをクリックする.
StudentsController.cs が追加されるので_に示すように書き換えよう.
|
|
コントローラークラスにデータコンテキストクラスの private なフィールドを追加し,コンストラクタを追加してこのフィールドを初期化するようにしている. ASP.NET Core にはDependency Injection という仕組みがあり,このように「必要なオブジェクトを引数に持つコンストラクタ」を定義しておくとシステムが必要な オブジェクトを適切に生成して渡してくれるようになる.
このコントローラーに図5b-1-1で示した,Index
,Create
,Details
,Edit
,Delete
の5つのアクションを追加する.
アクションによってはGETリクエストだけでなくPOSTリクエストを受け付けるものもある.結局このコントローラーは_に示す8つのメソッドを最終的に定義することになる.
これまでの説明の通り,そのアクションにGETでアクセスするのか,POSTでアクセスするかによって対応するStudentController
クラスのメソッドも異なるので注意しよう.
たとえば_を見ると,Create
アクションにはGETでアクセスする場合と,POSTでアクセスする場合がある.
このためStudentController
にはCreate
という名前のメソッドがGET用とPOST用で二つ存在することになる.
間違ってGET用のメソッドをPOST用に書き換える,といったことをしないよう気を付けよう .
アクション | GET メソッドでアクセスした際の機能 | POST メソッドでアクセスした際の機能 |
---|---|---|
Index | 全学生一覧を表示する 対応リスト:リスト5b-4-1 | - |
Create | 新規学生を登録するためのフォームを表示する 対応リスト:リスト5b-5-1 | ←から送信された学生情報をデータベースに反映させる 対応リスト:リスト5b-5-3 |
Details | ひとりの学生の詳細情報を表示する 対応リスト:リスト5b-6-1 | - |
Edit | ひとりの学生の詳細情報を編集するためのフォームを表示する 対応リスト:リスト5b-7-1 | ←から送信された学生情報をデータベースに反映させる 対応リスト:リスト5b-7-3 |
Delete | 指定された学生情報の削除を削除するかどうか確認する. 対応リスト:リスト5b-8-1 | ←から送信された学生情報をデータベースから削除する 対応リスト:リスト5b-8-3 |