Asp.net-mvc-actions

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

ASP.NET MVC-アクション

ASP.NET MVCアクションメソッドは、要求を実行し、それに対する応答を生成します。 デフォルトでは、ActionResultの形式で応答を生成します。 アクションには通常、ユーザーの操作と1対1のマッピングがあります。

たとえば、ブラウザにURLを入力し、特定のリンクをクリックして、フォームなどを送信します。 これらの各ユーザーインタラクションにより、リクエストがサーバーに送信されます。 いずれの場合も、リクエストのURLには、MVCフレームワークがアクションメソッドを呼び出すために使用する情報が含まれています。 アクションメソッドの1つの制限は、インスタンスメソッドである必要があるため、静的メソッドにできないことです。 また、戻り値の制限はありません。 したがって、文字列、整数などを返すことができます。

リクエスト処理

アクションは、MVCアプリケーションの最終的な要求先であり、コントローラーの基本クラスを使用します。 リクエスト処理を見てみましょう。

  • /Home/indexなどのURLが到着すると、ルーティングテーブル内で構成された何かがそのURLの処理方法を認識していることを検査して理解するのはUrlRoutingModuleです。

リクエスト処理

  • UrlRoutingModuleは、ルーティングテーブルで構成した情報をまとめ、MVCルートハンドラーに制御を渡します。
  • MVCルートハンドラーは、コントローラーをHTTPハンドラーであるMvcHandlerに渡します。
  • MvcHandlerはコントローラーファクトリーを使用してコントローラーをインスタンス化し、そのコントローラー値のRouteDataを調べるため、どのコントローラーをインスタンス化するかを認識します。
  • MvcHandlerがコントローラーを取得すると、MvcHandlerが認識するのはIController Interfaceのみであるため、コントローラーに実行するよう指示するだけです。
  • コントローラーに実行するように指示するとき、それはMVCのコントローラー基本クラスから派生します。 Executeメソッドは、アクション呼び出しを作成し、そのアクション呼び出しに、呼び出すメソッドを探し、呼び出すアクションを見つけるように指示します。 *ここでも、アクション呼び出し側はRouteDataを調べて、ルーティングエンジンから渡されたアクションパラメーターを見つけます。

アクションの種類

基本的に、アクションはさまざまなタイプのアクション結果を返します。 ActionResultクラスは、すべてのアクション結果のベースです。 以下は、さまざまな種類のアクション結果とその動作のリストです。

Sr.No. Name and Behavior
1
  • ContentResult*

文字列を返します

2

FileContentResult

ファイルの内容を返します

3

FilePathResult

ファイルの内容を返します

4

FileStreamResult

ファイルの内容を返します

5

EmptyResult

何も返しません

6

JavaScriptResult

実行用のスクリプトを返します

7

JsonResult

JSON形式のデータを返します

8

RedirectToResult

指定されたURLにリダイレクトします

9

HttpUnauthorizedResult

403 HTTPステータスコードを返します

10

RedirectToRouteResult

異なるアクション/異なるコントローラーアクションへのリダイレクト

11

ViewResult

ビューエンジンの応答として受信

12

PartialViewResult

ビューエンジンの応答として受信

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);
      }
   }
}

次のURL http://localhost:61465/Employee/Mark を要求すると、アクションとして次の出力を受け取ります。

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

コントローラーを追加

コントローラーをもう1つ追加します。

  • ステップ1 *-Controllersフォルダーを右クリックして、Add→Controllerを選択します。

Add Another Controller

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

足場ダイアログの追加

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

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

CustomerController

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

Controllersフォルダーに新しいC#ファイル「CustomerController.cs」が表示され、Visual Studioでも編集できるようになっています。

set_name CustomerController

同様に、HomeControllerという名前のコントローラーをもう1つ追加します。 以下は、HomeController.csクラスの実装です。

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

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

namespace MVCControllerDemo.Controllers {
   public class HomeController : Controller{
     //GET: Home
      public string Index(){
         return "This is Home Controller";
      }
   }
}
  • ステップ4 *-このアプリケーションを実行すると、次の出力が表示されます。

ホームコントローラー出力

  • ステップ5 *-上記で作成したCustomerコントローラーに次のコードを追加します。
public string GetAllCustomers(){
   return @"<ul>
      <li>Ali Raza</li>
      <li>Mark Upston</li>
      <li>Allan Bommer</li>
      <li>Greg Jerry</li>
   </ul>";
}

ステップ6 *-このアプリケーションを実行し、 *http://localhost:61465/Customer/GetAllCustomers を要求します。 次の出力が表示されます。

Localhost GetAllCustomers

また、同じコントローラーまたは別のコントローラーのアクションにリダイレクトすることもできます。

以下は、次のコードを使用してHomeControllerのコードを変更することにより、HomeControllerからCustomer Controllerにリダイレクトする簡単な例です。

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

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

namespace MVCControllerDemo.Controllers{
   public class HomeController : Controller{
     //GET: Home
      public ActionResult Index(){
         return RedirectToAction("GetAllCustomers","Customer");
      }
   }
}

ご覧のとおり、RedirectToAction()メソッドActionResultを使用しました。このメソッドは、アクション名とコントローラー名の2つのパラメーターを取ります。

このアプリケーションを実行すると、デフォルトルートが/Customer/GetAllCustomersにリダイレクトすることがわかります。

ローカルホストの顧客GetAllCustomers