情報応用演習Ⅰ(2024)

【T5b】モデルとデータベースの連携(後編)(8/8)

プロジェクトタイプ(注意: 本文参照)
プロジェクト名T5b
ソリューション名PIT5
注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備作業を参照せよ.

5b-8. Deleteアクションとビューの作成

最後に個々の学生の詳細情報を削除するためのアクションDeleteを作成しよう. StudentsControllerクラスに_に示すメソッドを追加する.

StudentsControllerクラスの変更内容(Deleteアクション(GET用))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// Deleteアクション(GET用)
public IActionResult Delete(int? id)
{
    if (id == null)                                       // idが指定されなかったら
        return NotFound();                                // 404 Not Found

    var student = (from s in _context.Students            //  
                   where s.Id == id                       // LINQを用いてidで指定された学生情報を探す
                   select s).FirstOrDefault();            // 

    if (student == null)                                  // idで指定された学生が
        return NotFound();                                // 見つからなかったら 404 Not Found

    return View(student);                                 // 見つかった学生情報をビューに渡す
}

このDelete()メソッドもまたメソッド名を除けば,リスト5b-6-1Details()メソッドや リスト5b-7-1Edit()メソッドと全く同じである. 次にこのアクション用のビューを作成する. Views/Students フォルダにDeleteという名前のビューを追加する. Views/Students/Delete.cshtml を_のように変更する.

Views/Students/Delete.cshtmlの変更内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@model Student

@{
    ViewData["Title"] = "学生情報の削除";

    if (Model is null) throw new ArgumentNullException(nameof(Model)); // ad-hoc! 非null保証のための回避策
}

<form asp-action="Delete">
  <input type="hidden" asp-for="@Model.Id" />
  ID:@Html.DisplayFor(s => s.Id), @Html.DisplayFor(s => s.LastName) @Html.DisplayFor(s => s.FirstName)
  を削除します.<br />
  <input type="submit" value="OK" />
</form>

<a asp-action="Index">一覧に戻る</a>
| <a asp-action="Details" asp-route-id="@Model.Id">詳細に戻る</a> 

10行目で削除する学生情報のIDを隠しパラメータ(type="hidden")としてフォームに埋め込んでいる.

次にこのフォームの送信に対応するアクションメソッドを用意しよう. StudentsControllerクラスに_に示すメソッドを追加する.

StudentsControllerクラスの変更内容(Deleteアクション(POST用))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// Deleteアクション(POST用)
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Delete(int? id, [Bind("Id")] Student student)
{
    if (id == null)                            // idが指定されなかったら
        return NotFound();                     // 404 Not Found

    if (id != student.Id)                      // ルーティングパラメータと
        return NotFound();                     // 送信されたデータが食い違っていた場合は
                                               // 404 Not Found

    _context.Remove(student);                  // 指定された学生情報を削除する.
    _context.SaveChanges();                    // データベースに変更を保存する.

    return RedirectToAction(nameof(Index));    // Index に遷移する.
}

処理の前半はリスト5b-7-3Editアクション(POST用)と似ているが, _の10行目ではRemove()メソッドを用いて,指定された学生情報を削除している.

ここまで書けたら実行してみよう.一覧に表示されている学生のリンクをクリック→「削除」のリンクをクリックして Deleteアクションにアクセスし,「OK」ボタンをクリックしてみよう(__). Indexアクションに遷移して,学生情報が一件削除されたことが分かるはずである(_).

実行結果

ここまでを確認できたら今回のチュートリアルは完了である. なお本日は課題が出題されている.忘れずに取り組むこと

Last updated on 2024-05-10
Published on 2024-05-10

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