情報応用演習Ⅰ(2024)

【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 が追加されるので_に示すように書き換えよう.

StudentsControllerクラスの変更内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; // 追記
using T5b.Models;                    // 追記
using T5b.Data;                      // 追記

namespace T5b.Controllers
{
    public class StudentsController : Controller
    {
        private readonly T5bContext _context; // データコンテキストクラス

        public StudentsController(T5bContext context) // DIのためのコンストラクタ
        {
            _context = context;
        }

        // Indexアクション(GET用)
        public IActionResult Index()
        {
            return View();
        }
    }
}

コントローラークラスにデータコンテキストクラスの private なフィールドを追加し,コンストラクタを追加してこのフィールドを初期化するようにしている. ASP.NET Core にはDependency Injection(でぺんでんしー・いんじぇくしょん) という仕組みがあり,このように「必要なオブジェクトを引数に持つコンストラクタ」を定義しておくとシステムが必要な オブジェクトを適切に生成して渡してくれるようになる.

このコントローラーに図5b-1-1で示した,IndexCreateDetailsEditDeleteの5つのアクションを追加する. アクションによってはGETリクエストだけでなくPOSTリクエストを受け付けるものもある.結局このコントローラーは_に示す8つのメソッドを最終的に定義することになる. これまでの説明の通り,そのアクションにGETでアクセスするのか,POSTでアクセスするかによって対応するStudentControllerクラスのメソッドも異なるので注意しよう. たとえば_を見ると,CreateアクションにはGETでアクセスする場合と,POSTでアクセスする場合がある. このためStudentControllerにはCreateという名前のメソッドがGET用とPOST用で二つ存在することになる. 間違ってGET用のメソッドをPOST用に書き換える,といったことをしないよう気を付けよう

Studentsコントローラーの各アクションの概要
アクション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
Last updated on 2024-05-10
Published on 2024-05-10

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.