ASP.NET MVCコントローラとアクション
この文章は皆さんと一緒にASPについて議論します.NET MVCフレームワークのControllerとAction.この文章は以下の内容を含む:1.Controller 2についてController受信要求パラメータ3.ActionResultに戻る
ユーザがURLアドレスを要求すると、ルーティングシステムはその要求をControllerに渡して対応する.一般に、Controllerは、関連パラメータを受信し、特定のビジネスロジックを処理するために下位レベルのModelを呼び出し、ActionResultを返す必要があります.
MVCモードでは、ControllerはModelとViewを接続する中心的な位置にある.理想的には、Webアプリケーションは「太ったモデル、痩せたコントローラ、ダミービュー」を実現する必要があります.デブモデルとは、すべてのビジネスロジックがModelに存在し、機能が強く、比較的高い集約性を有することを意味し、痩せたコントローラとは、コントローラのコードをできるだけ簡素化し、ビジネスロジックも含まず、インタフェースロジックも含まず、パラメータの抽出とModelおよびViewの呼び出しのみを含むことを意味する.ダミービューとは、Viewがすべてのビジネスロジックについて何も知らず、1つのページを表示するだけで、必要なすべてのデータがControllerによって伝達され、Modelレイヤを直接呼び出してデータを取得せず、データベースに直接アクセスしないことを意味します.
Controllerの2つの最も重要な仕事は:1.Webリクエストを処理し、渡されたすべてのパラメータを受信します.2.対応するWebリクエストは、特定のActionResultを返します.
ControllerのActionで今回要求されたパラメータを取得したい場合、最も直接的な方法はContextのオブジェクトで取得してもよいし、Actionメソッドのパラメータで直接受信してもよい(ActionメソッドのパラメータはModelBinderで付与されており、プログラマがコードを書く必要はない)
通常、私たちのコントロールクラスはSystemから継承されています.Web.Mvc.Controllerクラス、この親クラスにはいくつかのオブジェクトがあり、Request、Response、RouteData、HttpContext、Server、Sessionなど、自分のコントローラで直接使用できます.次によく使われることをいくつか挙げます.
ツールバーの
を選択します.
説明
Request.QueryString
NameValueCollection
このGetリクエストからクエリー文字列の変数と値を取得
Request.Form
NameValueCollection
今回のPostリクエストから変数と値を取得
Request.Cookie
HttpCookieCollection
今回のリクエストでブラウザから送信されたCookie値
Request.Uri
Uri
要求されたURLパス
RouteData.Values
RouteValueDictionary
ルーティングパラメータ
HttpContext.Session
HttpSessionStateBase
セッション内のキー値の取得
User
IPrincipal
現在のユーザーの認証情報の取得
アクションではこう使います
要求を処理すると、MVCフレームワークは自動的にRequestから実行する.QueryString ,Request.Form ,Request.RouteData.Valuesなどの集合ではパラメータ名に基づいてパラメータに値を割り当て,これらのパラメータにはoutとrefキーワードを含めることができず,大文字と小文字が敏感ではない.
バインドパラメータは、まず、data providerによって上記の幾何学的オブジェクトから値を取り出す、data binderに付与し、data binderによって検証、タイプ変換などの操作を行い、actionのパラメータというパラメータのタイプは任意である.Netタイプ、具体的なバインド方式は後で文章で具体的に言います.model binderが参照タイプのパラメータに対応する値を見つけることができない場合、このパラメータにnullが割り当てられ、値タイプであれば例外が放出されます.このような状況を回避するために、actionのパラメータにデフォルト値を手動で割り当てるか、次のコードに示すように、パラメータを空のタイプとして定義できます.
以上の手順をModel Bindingと呼びますが、MVCフレームワークでは単純なパラメータのみならず、複雑なオブジェクトにも配列や集合にも値を割り当てることができます.詳細についてはASPを参照してください.NET MVC Model Binding
Controllerが要求を処理した後、HTMLページ、ファイル、HTTPコードなどの結果を返す必要があります.ActionメソッドにHTMLタグを返すことができますが、このように書くと効率が低いだけでなく、メンテナンスが容易ではなく、ユニットテストにも不利です.ActionResultオブジェクトを簡単に返すことができます.MVCフレームワークには、以下に示すように、ActionResultクラスから継承される一連の組み込み型が含まれています.
クラス名
説明
メソッド名
ViewResult
指定またはデフォルトのViewテンプレートを表示
View
PartialViewResult
指定またはデフォルトのページテンプレートの一部を表示
PartialView
RedirectToRouteResult
リダイレクト
RedirectToAction , RedirectToActionPermanent ,RedirectToRoute , RedirectToRoutePermanent
RedirectRestult
リダイレクト
Redirect ,RedirectPermanent
ContentResult
テキスト情報を返す
Content
FileResult
ブラウザにバイナリ・ファイルを返す
File
JsonResult
ひとつNetオブジェクトをJson文字列にシーケンス化して返す
Json
HttpUnauthorizedResult
HTTP 401に戻る
HttpNotFountResult
指定ファイルが見つかりません404
HttpNotFound
ページにデータを渡すには3つの方法があります
受信データのビューは、強いタイプのビューであるべきです.
ビューページの呼び出し方法は次のとおりです.
ViewBagはdynamicタイプなので、ViewBagに任意のプロパティの値を割り当てることができます.dynamicクラスは.Net 4.0の新しいプロパティでは、オブジェクトがdynamicタイプとして宣言された場合、オブジェクトに関連するコードはコンパイルに参加せず、エラーが発生した場合、実行時に例外が放出されます.
ビューページの呼び出し方法は次のとおりです.
ビューページの呼び出し方法(強制タイプ変換が必要)
RedirectResultは2つに分けられ、1つ目は通常の意味でのジャンプ、2つ目は永久ジャンプである.様々な方法は、リロードされたパラメータに基づいてのみ使用できますが、ここでは説明しません.
XML、HTML、または純粋なテキスト情報などのテキスト情報を返すにはContentResultオブジェクトを返します.
Jsonは現在比較的流行しているプラットフォーム間の純粋なテキストフォーマットであり、一般的にAjax技術に用いられる.
Controllerについて
ユーザがURLアドレスを要求すると、ルーティングシステムはその要求をControllerに渡して対応する.一般に、Controllerは、関連パラメータを受信し、特定のビジネスロジックを処理するために下位レベルのModelを呼び出し、ActionResultを返す必要があります.
MVCモードでは、ControllerはModelとViewを接続する中心的な位置にある.理想的には、Webアプリケーションは「太ったモデル、痩せたコントローラ、ダミービュー」を実現する必要があります.デブモデルとは、すべてのビジネスロジックがModelに存在し、機能が強く、比較的高い集約性を有することを意味し、痩せたコントローラとは、コントローラのコードをできるだけ簡素化し、ビジネスロジックも含まず、インタフェースロジックも含まず、パラメータの抽出とModelおよびViewの呼び出しのみを含むことを意味する.ダミービューとは、Viewがすべてのビジネスロジックについて何も知らず、1つのページを表示するだけで、必要なすべてのデータがControllerによって伝達され、Modelレイヤを直接呼び出してデータを取得せず、データベースに直接アクセスしないことを意味します.
Controllerの2つの最も重要な仕事は:1.Webリクエストを処理し、渡されたすべてのパラメータを受信します.2.対応するWebリクエストは、特定のActionResultを返します.
Controller受信要求パラメータ
ControllerのActionで今回要求されたパラメータを取得したい場合、最も直接的な方法はContextのオブジェクトで取得してもよいし、Actionメソッドのパラメータで直接受信してもよい(ActionメソッドのパラメータはModelBinderで付与されており、プログラマがコードを書く必要はない)
コンテキストオブジェクトからのパラメータの取得
通常、私たちのコントロールクラスはSystemから継承されています.Web.Mvc.Controllerクラス、この親クラスにはいくつかのオブジェクトがあり、Request、Response、RouteData、HttpContext、Server、Sessionなど、自分のコントローラで直接使用できます.次によく使われることをいくつか挙げます.
ツールバーの
を選択します.
説明
Request.QueryString
NameValueCollection
このGetリクエストからクエリー文字列の変数と値を取得
Request.Form
NameValueCollection
今回のPostリクエストから変数と値を取得
Request.Cookie
HttpCookieCollection
今回のリクエストでブラウザから送信されたCookie値
Request.Uri
Uri
要求されたURLパス
RouteData.Values
RouteValueDictionary
ルーティングパラメータ
HttpContext.Session
HttpSessionStateBase
セッション内のキー値の取得
User
IPrincipal
現在のユーザーの認証情報の取得
アクションではこう使います
public ActionResult Index()
{
string info = Request.QueryString["info"] ;
ViewBag.Info = info ;
return View();
}
Actionメソッドのパラメータから取得
要求を処理すると、MVCフレームワークは自動的にRequestから実行する.QueryString ,Request.Form ,Request.RouteData.Valuesなどの集合ではパラメータ名に基づいてパラメータに値を割り当て,これらのパラメータにはoutとrefキーワードを含めることができず,大文字と小文字が敏感ではない.
public ActionResult Index( string info )
{
ViewBag.Info = info ;
return View();
}
バインドパラメータは、まず、data providerによって上記の幾何学的オブジェクトから値を取り出す、data binderに付与し、data binderによって検証、タイプ変換などの操作を行い、actionのパラメータというパラメータのタイプは任意である.Netタイプ、具体的なバインド方式は後で文章で具体的に言います.model binderが参照タイプのパラメータに対応する値を見つけることができない場合、このパラメータにnullが割り当てられ、値タイプであれば例外が放出されます.このような状況を回避するために、actionのパラメータにデフォルト値を手動で割り当てるか、次のコードに示すように、パラメータを空のタイプとして定義できます.
public ActionResult Index(string info ="Hello , World !",int number=0 , double? doubleData)
{
ViewBag.Info = info ;
return View();
}
以上の手順をModel Bindingと呼びますが、MVCフレームワークでは単純なパラメータのみならず、複雑なオブジェクトにも配列や集合にも値を割り当てることができます.詳細についてはASPを参照してください.NET MVC Model Binding
ActionResultに戻る
Controllerが要求を処理した後、HTMLページ、ファイル、HTTPコードなどの結果を返す必要があります.ActionメソッドにHTMLタグを返すことができますが、このように書くと効率が低いだけでなく、メンテナンスが容易ではなく、ユニットテストにも不利です.ActionResultオブジェクトを簡単に返すことができます.MVCフレームワークには、以下に示すように、ActionResultクラスから継承される一連の組み込み型が含まれています.
クラス名
説明
メソッド名
ViewResult
指定またはデフォルトのViewテンプレートを表示
View
PartialViewResult
指定またはデフォルトのページテンプレートの一部を表示
PartialView
RedirectToRouteResult
リダイレクト
RedirectToAction , RedirectToActionPermanent ,RedirectToRoute , RedirectToRoutePermanent
RedirectRestult
リダイレクト
Redirect ,RedirectPermanent
ContentResult
テキスト情報を返す
Content
FileResult
ブラウザにバイナリ・ファイルを返す
File
JsonResult
ひとつNetオブジェクトをJson文字列にシーケンス化して返す
Json
HttpUnauthorizedResult
HTTP 401に戻る
HttpNotFountResult
指定ファイルが見つかりません404
HttpNotFound
ViewResultに戻ると、ページにデータが転送されます。
ページにデータを渡すには3つの方法があります
Modelオブジェクトをビューに渡す
受信データのビューは、強いタイプのビューであるべきです.
public ActionResult About()
{
DateTime date = DateTime.Now;
return View( date );
}
ビューページの呼び出し方法は次のとおりです.
@model DateTime
@Model.Month
ビューにデータを転送します。
ViewBagはdynamicタイプなので、ViewBagに任意のプロパティの値を割り当てることができます.dynamicクラスは.Net 4.0の新しいプロパティでは、オブジェクトがdynamicタイプとして宣言された場合、オブジェクトに関連するコードはコンパイルに参加せず、エラーが発生した場合、実行時に例外が放出されます.
public ActionResult About()
{
ViewBag.Date = DateTime.Now;
ViewBag.Message=“hello , world!”;
return View();
}
ビューページの呼び出し方法は次のとおりです.
@ViewBag.Date
@ViewBag.Message
ビューにデータを転送するには、ViewDataを使用します。
public ActionResult About()
{
ViewData["Date"] = DateTime.Now;
ViewData["Message"]=“hello , world!”;
return View();
}
ビューページの呼び出し方法(強制タイプ変換が必要)
@ViewData["Date"]
@ViewData["Message"]
RedirectResultオブジェクトを返します。
RedirectResultは2つに分けられ、1つ目は通常の意味でのジャンプ、2つ目は永久ジャンプである.様々な方法は、リロードされたパラメータに基づいてのみ使用できますが、ここでは説明しません.
ContentResultオブジェクトを返します
XML、HTML、または純粋なテキスト情報などのテキスト情報を返すにはContentResultオブジェクトを返します.
return Content("This is content", "text/plain", System.Text.Encoding.Default);
JsonResultオブジェクトを返します
Jsonは現在比較的流行しているプラットフォーム間の純粋なテキストフォーマットであり、一般的にAjax技術に用いられる.
return Json(JsonData) ;
FileResultオブジェクトを返します
return File("fileName" , "contentType" ,"downloadName") ;
エラーメッセージを返すかHTTPコードを返す
return new HttpStatusCodeResult(404, " URL not found 。。。") ;
return HttpNotFound() ;