ASP.NET MVC/アクション

提供: MonoBook
ナビゲーションに移動 検索に移動

ASP.NET MVCアクションとは、フロントコントローラーから呼び出されるコントローラークラス(「Controller クラス (System.Web.Mvc)」の派生クラス)のメソッドのことで、ASP.NET MVCのコントローラーのうち、プログラマーが記述する部分をさす。

アクション(コントローラークラス内のメソッド)を記述するためのコントローラークラス自体は「Controller クラス (System.Web.Mvc)」を継承して作成する。

    using System.Web.Mvc;

    // コントローラークラスの
    public class HomeController : Controller
    {
        // アクション(メソッド)
        public ActionResult Index()
        {
            return View();
        }
    }

フォルダー構成[編集 | ソースを編集]

ASP.NET MVCでは、「Controllers」ディレクトリ以下にコントローラークラスを格納することになっている。

戻り値[編集 | ソースを編集]

ASP.NET MVCのアクションは必ずActionResultクラスのインスタンスを返すことになっている。 標準で用意されているActionResultから派生したクラスの種類などの、詳細は「ActionResult クラス (System.Web.Mvc)」を参照。

MVC[編集 | ソースを編集]

MVCの原則に従えば、コントローラーモデルビューを繋ぐのが主目的なので、コントローラーアクションにはモデルからデータを取得し、適切なビューに橋渡しする処理のみを書く。たとえばPCスマートフォンでビューを切り替えるなどのビジネスロジックでもHTMLの生成でもない、あくまで連結器としての機能のみをコントローラークラスに書いておく。

コントローラーにビジネスロジックを書いてはいけない。書けないわけではなく、「書くな」という決まり事であり、書けるし、書いた方が手っ取り早いし、書いている人も多いが、サイトが肥大化したときにスパゲッティになるよね、ということらしい。

悪い例[編集 | ソースを編集]

HomeコントローラークラスのIndexアクション(Indexメソッド)内にビジネスロジックを記述してある。

// Controllers/HomeController.cs
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "ASP.NET MVC へようこそ";
            return View();
        }
    }

良い例[編集 | ソースを編集]

モデルでデータを管理する。

// Models/HelloModel.cs
    public class HelloModel
    {
        public static string Say()
        {
            return "ASP.NET MVC へようこそ";
        }
    }

コントローラークラスのアクションは、モデルからデータを取得し、ビューに橋渡しをする。

// Controllers/HomeController.cs
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = HelloModel.Say();
            return View();
        }
    }

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]


外部リンク[編集 | ソースを編集]