ASP.NET MVCのController受信入力詳細

3330 ワード

ASP.NET mvcのControllerは、ユーザーからの要求に正しく応答するには、ユーザーが入力した値と伝達したパラメータ情報、例えば、パラメータの値をクエリーしたり、提出したフォームの値や、ルーティングシステムを通じてURLから取得した値などを取得します.ASP.NET MVCには、これらの値にアクセスするための3つの方法があります.
1、Controllerのコンテキストから取得する
2、Actionパラメータから取得
3、ASPを利用する.NET MVCのモデルバインド特性
以下、上記の3つの方法について紹介します.

一、コントローラのコンテキストオブジェクトからパラメータ値を取得する


作成したControllerがベースクラスのControllerから継承されると、Controllerのコンテキストからパラメータ情報を取得できます.ベースクラスのControllerでは、Request、Response、RouteData、HttpContext、and Serverなど、さまざまな情報を提供しています.これらのオブジェクトを使用すると、現在要求されている関連変数の値を取得できます.
たとえば、次のアクション方法があります.
public ActionResult RenameProduct() {
//コンテキストオブジェクトから取得する変数の値string userName = User.Identity.Name;
string serverName = Server.MachineName;
string clientIP = Request.UserHostAddress;
DateTime dateStamp = HttpContext.Timestamp;
AuditRequest(userName, serverName, clientIP, dateStamp, "Renaming product");

//コンテキストの要求オブジェクトからフォーム発行のパラメータ値を取得する
string oldProductName = Request.Form["OldName"];
string newProductName = Request.Form["NewName"];
bool result = AttemptProductRename(oldProductName, newProductName);

ViewData["RenameResult"] = result;
return View("ProductRenamed");
}

二、Actionパラメータからパラメータ値を取得する


ControllerのActionメソッドには、パラメータ、ASPを付けることができます.NET MVCフレームワークでは、要求されたコンテキストからこれらのパラメータの値がアクションのパラメータにそれぞれ対応するように自動的に抽出されます.これも可読性が最もよく、最も紹介されている方法です.
以前は、次のオブジェクトを要求することによってパラメータの値を取得していたとします.
public ActionResult ShowWeatherForecast() {
string city = (string)RouteData.Values["city"];
DateTime forDate = DateTime.Parse(Request.Form["forDate"]);
//... implement weather forecast here ...
return View();
}
次に、Actionパラメータを使用して、上記を改善することができます.
public ActionResult ShowWeatherForecast(string city, DateTime forDate) {
//... implement weather forecast here ...
return View();
}
Actionパラメータを用いることでコード量が大幅に減少し,可読性が向上することが分かる.パラメータの形式を使用する利点は、RouteDataオブジェクトとRequestオブジェクトを作成する必要がなく、対応するパラメータを直接渡すことでテストできるため、ユニットテストに有利です.MVCフレームワークは、要求コンテキストオブジェクトをチェックすることによって、これらのパラメータに値を提供し、以下のセットを含む.
Request.QueryString,
Request.Form ,
RouteData.Values
注意:Actionパラメータは大文字と小文字を区別しません.例えば、Actionにはcityというパラメータがあります.Requestを通過することができます.Form[City]は値を取得します.

三、ASPを利用する.NET MVCのモデルバインド特性取得パラメータ値


ベースクラスControllerがアクションパラメータを設定する値は、MVCフレームワークのvalue providersとmodel bindersの2つのコンポーネントによって行われます.MVCフレームに内蔵されたvalue providersは、集合から、Request.Form,  Request.QueryString,  Request.FilesとRouteDataValuesは値を取得し、model bindersに渡してそれぞれ私たちのActionに対応するパラメータにマッピングします.デフォルトのmodel bindersは任意にマッピングできます.基本タイプ、集合タイプ、カスタムクラスを含むNETタイプのパラメータ.私が前に書いたASPを見てもいいです.NET MVCにおけるデフォルトModel BinderバインドActionパラメータがList、Dictionaryなどの集合の例については、後で詳しく説明するASP.NET MVCのモデルバインド特性.