次はModelに続いて、Controllerでの大まかな操作など学んだことをまとめてみた。
なお、Entity Frameworkを使用している前提で書く。
※いろいろ触ってみて気づいたことや認識に違いがあれば、都度修正していく予定。
全体の特徴
○クラス名は「Controller」クラスを継承している。 ○クラスを作成する際に「Entity Frameworkを使用した、ビューがあるMVCコントローラー」を指定して作ると、CRUD操作のメソッドがデフォルトでクラスの中に自動で作成される。 ○クラス内のどこでも参照できるインスタンスとして、DBのデータを読み込むコンテキストクラスが定義してある。 ○ログイン認証前でも操作できるようにするには、[AllowAnonymous]アノテーションをクラスの1行上に記載する。 ○ログイン認証後のみ、操作できるようにするには、[Authorize]アノテーションをクラスの1行上に記載する。CRUD操作を扱うメソッドの中身
CREATE
○Http経由でのみ処理させるために、[HttpPost]アノテーションがメソッドの1行上に書かれている。 ○引数で、Bindメソッドが使われており、Includeプロパティに結びつける引数が指定されている (これをすることで、POSTアクションでデータが渡ってきたときに、そのデータの中のプロパティとそのPOSTアクションの引数に自動的に結びつけてくれる)。 ○「ModelState.IsValid」はPOSTの処理が走ったときに、渡ってきたデータが正常どうかを判定している。 これがtrueだとdb.(テーブル名).Add(引数); // 引数をDBに追加
db.SaveChange(); // 変更内容を反映させる
RedirectToAction(); // 処理が成功した後に遷移したいページに遷移
falseだと、
View(引数)
の記載があるだけ。
READ
View(db.(クラス名).ToList())
DBに登録されているテーブルをただ返すだけ。
UPDATE
(表示) UPDATEのページを表示する際に、UPDATEするデータを取得する必要があるので、db.(クラス名).Find(id)
で該当データを検索する。
検索したデータがあれば、
View(引数)
で該当データがViewメソッドでUPDATEするデータを表示するViewページに渡される。
なければ、HttpNotFound()でエラーが返される。
(処理)
処理の流れは基本的にCREATEと同じ。
DELETE
(表示) DELETEのページを表示する際に、DELETEするデータを取得する必要があるので、db.(クラス名).Find(id)
で該当データを検索する。
検索したデータがあれば、
View(引数)
で該当データがViewメソッドでUPDATEするデータを表示するViewページに渡される。
なければ、HttpNotFound()でエラーが返される。
(処理)
db.(クラス名).Find(id)
で該当データを検索した後に、
db.(クラス名).Remove(id); // 該当データをDBから削除
db.SaveChange(); // 変更内容を反映させる
RedirectToAction(); // 処理が成功した後に遷移したいページに遷移
という流れになっている。
参考記事
https://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_04/aspnetmvc3_04_01.html