Asp.net-mvc-controllers

提供:Dev Guides
移動先:案内検索

ASP.NET MVC-コントローラー

コントローラーは、本質的にASP.NET MVCアプリケーションの中心的なユニットです。 これは、受信HTTP要求とやり取りする最初の受信者です。 そのため、コントローラーはどのモデルを選択するかを決定し、そのビューがレンダリングされた後、モデルからデータを取得し、それをそれぞれのビューに渡します。 実際、コントローラーは、入力を受け取り、適切な出力をレンダリングするアプリケーションの全体的なフローを制御しています。

コントローラーは、組み込みコントローラーの基本クラスであるSystem.Web.Mvc.Controllerを継承するC#クラスです。 コントローラーの各パブリックメソッドはアクションメソッドと呼ばれます。つまり、何らかのURLを介してWebから呼び出してアクションを実行できます。

MVCの規則では、プロジェクトのセットアップ時にVisual Studioが作成したControllersフォルダーにコントローラーを配置します。

新しいASP.Net MVCプロジェクトを作成して、コントローラーの簡単な例を見てみましょう。

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。

新しいプロジェクトダイアログが開きます。

Visual Studioプロジェクトメニュー

  • ステップ2 *-左ペインから、テンプレート→Visual C#→Webを選択します。
  • ステップ3 *-中央のペインで、ASP.NET Webアプリケーションを選択します。
  • ステップ4 *-[名前]フィールドにプロジェクト名「MVCControllerDemo」を入力し、[OK]をクリックして続行します。 次のダイアログが表示され、ASP.NETプロジェクトの初期コンテンツを設定するよう求められます。

MVCControllerDemo

  • ステップ5 *-簡単にするために、[空にする]オプションを選択し、[フォルダーとコア参照を追加する]セクションの[MVC]チェックボックスをオンにして[OK]をクリックします。

最小限の定義済みコンテンツで基本的なMVCプロジェクトを作成します。

Visual Studioでプロジェクトを作成すると、ソリューションエクスプローラーウィンドウに多数のファイルとフォルダーが表示されます。

空のプロジェクトテンプレートからASP.Net MVCプロジェクトを作成したため、現時点では、アプリケーションには実行するものが含まれていません。

  • ステップ6 *-ソリューションエクスプローラーでControllersフォルダーを右クリックして、EmployeeControllerを追加します。 追加→コントローラを選択します。

EmployeeController

[足場の追加]ダイアログが表示されます。

EmployeeController Scaffolding Dialog

  • ステップ7 *-MVC 5 Controller – Emptyオプションを選択し、「追加」ボタンをクリックします。

[コントローラーの追加]ダイアログが表示されます。

MVC 5 Controller

  • ステップ8 *-名前をEmployeeControllerに設定し、[追加]ボタンをクリックします。

Controllersフォルダーに新しいC#ファイルEmployeeController.csが表示されます。このフォルダーはVisual Studioでも編集用に開かれています。

Custom Route Employee Controller

ここで、このアプリケーションでは、デフォルトのルートを持つEmployeeコントローラーのカスタムルートを追加します。

  • ステップ1 *-「App_Start」フォルダーの下の「RouteConfig.cs」ファイルに移動し、次のルートを追加します。
routes.MapRoute(
   "Employee", "Employee/{name}", new{
      controller = "Employee", action = "Search", name =
      UrlParameter.Optional });

以下は、RouteConfig.csファイルの完全な実装です。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCControllerDemo {
   public class RouteConfig {
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapRoute(
            "Employee", "Employee/{name}", new{
               controller = "Employee", action = "Search", name = UrlParameter.Optional });

         routes.MapRoute(
            name: "Default", url: "{controller}/{action}/{id}", defaults: new{
               controller = "Home", action = "Index", id = UrlParameter.Optional });
      }
   }
}

ユーザーが来て従業員を検索し、URL「従業員/マーク」を指定するシナリオを考えます。 この場合、MarkはActionメソッドとは異なるパラメーター名として扱われます。 そのため、この種のシナリオでは、デフォルトルートはあまり機能しません。

パラメーターが渡されるときにブラウザーから着信値を取得するために、MVCフレームワークはこの問題に対処する簡単な方法を提供します。 Actionメソッド内のパラメーターを使用することによります。

  • ステップ2 *-次のコードを使用してEmployeeControllerクラスを変更します。
using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCControllerDemo.Controllers  {
   public class EmployeeController : Controller {
     //GET: Employee
      public ActionResult Search(string name){
         var input = Server.HtmlEncode(name);
         return Content(input);
      }
   }
}

アクションメソッドにパラメーターを追加すると、MVCフレームワークはパラメーター名に一致する値を探します。 可能なすべての組み合わせを適用して、パラメーター値を見つけます。 ルートデータ、クエリ文字列などを検索します。

したがって、「/Employee/Mark」をリクエストすると、MVCフレームワークは「UserInput」のパラメーターが必要であると判断し、MarkがURLから選択され、自動的に渡されます。

Server.HtmlEncodeは、あらゆる種類の悪意のあるスクリプトをプレーンテキストに変換するだけです。 上記のコードをコンパイルして実行し、次のURL http://localhost:61465/Employee/Mark を要求すると、次の出力が得られます。

ローカルホスト従業員マーク

上記のスクリーンショットでわかるように、マークはURLから選択されています。