概要 †アクション・メソッドは戻り値としてActionResultオブジェクト(またはその派生オブジェクト)を返すのが基本だ。 実は、ASP.NET MVC*1はビュー・スクリプトを以下の順番で検索する。
種類 †
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")); 注意点:
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円で始められる本格的なお店のホームページ! コメント: |