Asp.net-mvc-actions
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 |
文字列を返します |
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を選択します。
[足場の追加]ダイアログが表示されます。
- ステップ2 *-MVC 5 Controller – Emptyオプションを選択し、「追加」ボタンをクリックします。
[コントローラーの追加]ダイアログが表示されます。
- ステップ3 *-名前をCustomerControllerに設定し、[追加]ボタンをクリックします。
Controllersフォルダーに新しいC#ファイル「CustomerController.cs」が表示され、Visual Studioでも編集できるようになっています。
同様に、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 を要求します。 次の出力が表示されます。
また、同じコントローラーまたは別のコントローラーのアクションにリダイレクトすることもできます。
以下は、次のコードを使用して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にリダイレクトすることがわかります。