Asp.Net MVC

概要

アクション・メソッドは戻り値としてActionResultオブジェクト(またはその派生オブジェクト)を返すのが基本だ。

実は、ASP.NET MVC*1はビュー・スクリプトを以下の順番で検索する。

  1. /Views/コントローラ名/アクション名.aspx
  2. /Views/コントローラ名/アクション名.ascx
  3. /Views/Shared/アクション名.aspx
  4. /Views/Shared/アクション名.ascx

種類

クラス名概要ヘルパー・メソッド
ViewResult指定されたビューを出力View
PartialViewResult指定されたユーザー・コントロールを出力 (通常は AJAX のシナリオで使用される)PartialView
RedirectResult指定されたURLにリダイレクトRedirect
RedirectToRouteResult指定されたアクションにリダイレクト (通常は AJAX のシナリオで使用される)RedirectToRoute/RedirectToAction
ContentResult指定された文字列を出力Content
FilePathResult指定されたパスの内容をファイルとして出力File
FileContentResultbyte配列の内容をファイルとして出力File
FileStreamResultストリームの内容をファイルとして出力File
JavaScriptResult指定されたコンテンツをJavaScriptスクリプトとして出力JavaScript
JsonResult指定されたコンテンツをJSON(JavaScript Object Notation)として出力Json
HttpUnauthorizedResult承認の失敗時にHTTP応答コード「401 Unauthorized」をセット
EmptyResult何もしない

ViewResultオブジェクト

アクション・メソッドの処理後に、指定されたビューを呼び出すためのActionResult派生オブジェクトだ。

利用例:

Return View("Result")

Return New ViewResult()

ContentResultオブジェクト

アクション・メソッドの結果を(ビュー・スクリプトに反映させるのではなく)そのままテキスト・コンテンツとして出力する。

Contentメソッドの構文:

Content(content As String, [contentType As String, [contentEncoding As Encoding]])
' content:出力するコンテンツ
' contentType:コンテンツ・タイプ
' contentEncoding:出力の文字エンコーディング

return Content("こんにちは", "text/plain");

return Content(builder.ToString(), "text/csv", Encoding.GetEncoding("Shift_JIS"));

注意点:

  • System.Net.Mime.MediaTypeNames.Text で返すタイプの指定ができる。
    • Html データが、HTML 形式であることを指定します。
    • Plain データが、プレーン テキスト形式であることを指定します。
    • RichText データが、リッチ テキスト形式 (RTF: Rich Text Format) であることを指定します。
    • Xml データが、XML 形式であることを指定します。
  • コンテンツタイプを指定しない場合、デフォルトは「text/html」で返す

JsonResultオブジェクト

アクション・メソッドの結果をJSON形式のコンテンツとして出力する。

Jsonメソッドは引数に指定されたオブジェクトを、JavaScriptSerializer.Serializeクラス(System.Web.Script.Serialization名前空間)でシリアライズし、最終的なレスポンスとして返す。

JSONデータそのものは、プレーン・テキストに過ぎないので、前述したContentメソッドを使っても代替することは可能だ。しかし、Jsonメソッド(JsonResultオブジェクト)では、与えられた引数がオブジェクトである場合にも、これをJSON形式にシリアライズしてくれる、コンテンツ・タイプを自動で設定してくれる、などのアドバンテージがある。特別な理由がない限りは、Jsonメソッドを優先して利用するべきだろう。

利用例:

var _db = new MyMvcEntities();

var bok = (from b in _db.Book where b.isbn == isbn
      select new {b.title, b.price, b.publish}).FirstOrDefault();

return Json(bok);

PartialViewResultオブジェクト

アクション・メソッドの結果をユーザー・コントロール(部分ビュー)に流し込み、レンダリングできる。

Ajaxによる画面の部分更新によく利用されているオブジェクトだ。

PartialViewメソッドの構文:

PartialView([view As String] ,[model As Object])
' view:ユーザー・コントロールのベース名
' model:ユーザー・コントロールに引き渡すオブジェクト

利用例:

return PartialView(bok);

JavaScriptResultオブジェクト

アクション・メソッドの結果をJavaScriptコードの形式として出力する。

Ajax通信のたびにコードとデータの双方を出力することになるため、クライアント/サーバ間を行き来するデータ・サイズはおのずと大きくなる。通常は、Ajax通信で必要なデータはJsonResult、またはContentResultオブジェクトを使って、都度の通信では必要最小限のデータだけをやり取りするのが好ましい。

サーバサイドの処理結果に応じて動的にJavaScriptのコードを生成したいというケースもあるだろうが、多くの場合、JavaScriptResultオブジェクトを利用するのはJSONPを利用する場合、ということになるはずだ。

利用例:

var ser = new JavaScriptSerializer();
var code = String.Format("{0}({1})",
               callback, ser.Serialize(bok));

// 生成した文字列をJavaScriptのコードとして返す
return JavaScript(code);

RedirectResultオブジェクト

アクション・メソッドの結果は指定された URI に302リダイレクトする

利用例:

return new RedirectResult( "http://monobook.org/wiki/PHP" );

RedirectToRouteResultオブジェクト

利用例:

RedirectToAction("Action", "Controller", new { parameter = value });

url「/users/4#Summary」への遷移
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });

FileResultオブジェクト

アクション・メソッドの結果をファイルやバイナリ・データとして出力する。

厳密には、ファイルの指定方法によって、その派生オブジェクトであるFileContentResult/FilePathResult/FileStreamResultオブジェクトに分類される。

アクセス先を「http://localhost:4419/Image/1125」とした場合には、サーバ上の「C:/Data/RIMG1125.JPG」がダウンロードされるようにする。

FileResultメソッドの構文:

File(contents As Byte(), type As String [,name As String])
File(contents As Stream(),type As String [,name As String])
File(path As String, type As String [,name As String])
' contents:ダウンロードするデータ本体
' path:ダウンロードファイルのパス
' type:ファイルのコンテンツ・タイプ
' name:ダウンロード時のファイル名

利用例:

var path = "C:/Data/123.JPG";
return File(path, "image/jpeg", "sample.jpg");

EmptyResultオブジェクト

何も処理をしない



月額たった 1,050円で始められる本格的なお店のホームページ!

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:32:12 (1627d)

PCpዾyǗlgĂ܂}WŔ܂z 萔O~ył񂫁z Yahoo yV NTT-X Store

z[y[W ̃NWbgJ[h COiq ӂ邳Ɣ[ COsیI COze