【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-1 のDetails()
メソッドや
リスト5b-7-1 のEdit()
メソッドと全く同じである.
次にこのアクション用のビューを作成する. 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-3 のEdit
アクション(POST用)と似ているが,
_ の10行目ではRemove()
メソッドを用いて,指定された学生情報を削除している.
ここまで書けたら実行してみよう.一覧に表示されている学生のリンクをクリック→「削除」のリンクをクリックして
Delete
アクションにアクセスし,「OK」ボタンをクリックしてみよう(_ ~_ ).
Index
アクションに遷移して,学生情報が一件削除されたことが分かるはずである(_ ).
実行結果 ここまでを確認できたら今回のチュートリアルは完了である.
なお本日は課題 が出題されている.忘れずに取り組むこと .
Last updated on 2024-05-10 Published on 2024-05-10