2015年3月18日水曜日

2.3 ASP.NET MVC(1)

プロジェクトの構成

コントローラクラスファイルはフォルダControllersの下に配置する。

コントローラクラスの実装

コントローラクラスの動作
  • 配下のメソッドはアクションメソッドと呼ばれ、これがURLの一部となる。
    URLは<コントローラ名>/<アクション名>
  • ビュー変数をViewDataオブジェクトのプロパティとして設定する
  • ヘルパーメソッドで、ActionResultオブジェクトを返す
ページ表示までの流れとしては、
コントローラ、アクションをURLで指定
→ビュー変数を設定
→ヘルパーメソッドでActionResultクラスを継承したクラスのオブジェクトを返す
→返されたオブジェクトに含まれるメソッド(コンストラクタ?)で、ページを表示したり、リダイレクトしたりする。
ということか。

ヘルパーメソッドと、返された時の動作
  • View:引数で指定された名前のビューで出力を生成
  • Content:引数で指定されたテキストを出力
  • File:引数で指定されたデータを出力
  • Redirect:引数で指定されたURLにリダイレクト
  • RedirectToAction:指定されたアクションにリダイレクト(コントローラ名も指定できる)
  • HttpNotFound:「404 Not Found」を出力
本書に書いてあるコントローラは、Imports部分を除くとこんな感じで書ける。
本書ではC#で書いてあるが、自分が使うときはVB.NETで書く可能性が高いので、VB.NETに書き換える。
というよりも、プロジェクト作成時にVBを選択していたら、これは勝手に生成された。
Returnが使えると思っていなかったのは、VBAから抜け切れてないのか。

Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        Return View()
    End Function

    Function About() As ActionResult
        ViewData("Message") = "Your application description page."

        Return View()
    End Function

    Function Contact() As ActionResult
        ViewData("Message") = "Your contact page."

        Return View()
    End Function
End Class

例えば、URLがhttp://....../Home/Aboutだとしたら、HomeControllerのAboutメソッドが呼ばれる。文字列"Controller"は自動でオミットされるのかな?このメソッドの中で変数ViewDataに値を設定、Viewメソッドで「ViewData変数をあげるから、これを使って表示しなさい」という動作を指定している。で、ページを表示するときに、ビューはViewDataの各プロパティを、HTMLの中に埋め込んで、表示させるということですね。。

とりあえずこれで動かしてみた

ちなみに、このままデバッグ開始したら、Index()が呼ばれた様子。デフォルトではそうなんでしょうね。
さらに、VS2013では、普通にプロジェクト作成したらMVC4のプロジェクトができます。なので、プロジェクト作成時に、ダイアログボックスの上の方から「.NET Framework4.5.1」を選択すること。そうするとMVC5のプロジェクトができる。備忘録。

0 件のコメント:

コメントを投稿