「ActionResult クラス (System.Web.Mvc)」の版間の差分
imported>Administrator 編集の要約なし |
imported>Administrator |
||
| 22行目: | 22行目: | ||
* [[PartialViewResult]] - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。 | * [[PartialViewResult]] - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。 | ||
* [[ViewResult]] - 指定されたビューをレンダリングして送信する。通常はこれ。 | * [[ViewResult]] - 指定されたビューをレンダリングして送信する。通常はこれ。 | ||
=== 独自ActionResult === | |||
ActionResultクラスを継承することでオレオレActionResultを作ることができる。 | |||
==== 例:ImageResult ==== | |||
Image(System.Drawing)のインスタンスを突っ込んで、ImageFormart(System.Drawing.Imaging)で指定された形式で出力するActionResultの例。 | |||
<source lang="csharp"> | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Web.Mvc; | |||
using System.Drawing; | |||
using System.Drawing.Imaging; | |||
public class ImageResult : ActionResult | |||
{ | |||
public ImageResult() { } | |||
public Image Image { get; set; } | |||
public ImageFormat ImageFormat { get; set; } | |||
private readonly Dictionary<ImageFormat, string> ContentTypes = new Dictionary<ImageFormat, string>() | |||
{ | |||
{ImageFormat.Bmp , "image/bmp"}, | |||
{ImageFormat.Gif , "image/gif"}, | |||
{ImageFormat.Icon, "image/vnd.microsoft.icon"}, | |||
{ImageFormat.Jpeg, "image/jpeg"}, | |||
{ImageFormat.Png , "image/png"}, | |||
{ImageFormat.Tiff, "image/tiff"}, | |||
{ImageFormat.Wmf , "image/wmf"}, | |||
}; | |||
public override void ExecuteResult(ControllerContext context) | |||
{ | |||
// verify properties | |||
if (this.Image == null) | |||
{ | |||
throw new ArgumentNullException("Image"); | |||
} | |||
if (this.ImageFormat == null) | |||
{ | |||
throw new ArgumentNullException("ImageFormat"); | |||
} | |||
// output | |||
var res = context.HttpContext.Response; | |||
res.Clear(); | |||
res.ContentType = this.ContentTypes[this.ImageFormat]; | |||
this.Image.Save(res.OutputStream, this.ImageFormat); | |||
} | |||
} | |||
</source> | |||
== 関連項目 == | == 関連項目 == | ||
2012年3月15日 (木) 04:59時点における版
ActionResult クラスとは、ASP.NET MVCのアクション・メソッドの戻り値として使う各種クラス(ActionResultを継承したクラス)のベースクラス。
アクションメソッド内でActionResult(を継承したクラス)の中身を穴埋めしてやると、ASP.NET MVCのフレームワーク側でその内容に従いHTMLやJSONなどのHTTPレスポンスが生成される。
たとえばViewResultであればビュー(HTMLテンプレート)を呼び出してレンダリングしたり、FileResultであればファイルを指定するだけでフレームワーク側で適切なHTTPレスポンスヘッダを生成し簡単にダウンロードダイアログを表示したりできる。
ContentResultだけでを用いてゴリゴリ書けば20世紀のPerlで書かれたウェブアプリケーションばりのソースコードになること受けあい。困ったらContentResult。まじおすすめ。
ActionResultの種類
ASP.NET MVCではActionResultクラスを継承した様々な便利クラスがあらかじめ用意されているので使うとよい。
- ContentResult - 文字列を直接HTTPレスポンスに書き込む。
- EmptyResult - 空のHTTPレスポンスを返す。
- FileResult - ファイルをダウンロードさせるためのベースクラス。
- FileContentResult - バイト配列をHTTPレスポンスに書き込む。
- FilePathResult - 指定されたファイルパスの中身をHTTPレスポンスに書き込む。
- FileStreamResult - Streamクラスの中身をHTTPレスポンスに書き込む。
- HttpUnauthorizedResult - 認証要求を送信する。
- JavaScriptResult - JavaScript(文字列)を直接HTTPレスポンスに書き込む。
- JsonResult - Objectクラスの中身を突っ込むとJSONに変換して送信する。
- RedirectResult - リダイレクトする。
- RedirectToRouteResult - 指定されたルート名およびルート値の結果を、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。
- PartialViewResult - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。
- ViewResult - 指定されたビューをレンダリングして送信する。通常はこれ。
独自ActionResult
ActionResultクラスを継承することでオレオレActionResultを作ることができる。
例:ImageResult
Image(System.Drawing)のインスタンスを突っ込んで、ImageFormart(System.Drawing.Imaging)で指定された形式で出力するActionResultの例。
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Drawing;
using System.Drawing.Imaging;
public class ImageResult : ActionResult
{
public ImageResult() { }
public Image Image { get; set; }
public ImageFormat ImageFormat { get; set; }
private readonly Dictionary<ImageFormat, string> ContentTypes = new Dictionary<ImageFormat, string>()
{
{ImageFormat.Bmp , "image/bmp"},
{ImageFormat.Gif , "image/gif"},
{ImageFormat.Icon, "image/vnd.microsoft.icon"},
{ImageFormat.Jpeg, "image/jpeg"},
{ImageFormat.Png , "image/png"},
{ImageFormat.Tiff, "image/tiff"},
{ImageFormat.Wmf , "image/wmf"},
};
public override void ExecuteResult(ControllerContext context)
{
// verify properties
if (this.Image == null)
{
throw new ArgumentNullException("Image");
}
if (this.ImageFormat == null)
{
throw new ArgumentNullException("ImageFormat");
}
// output
var res = context.HttpContext.Response;
res.Clear();
res.ContentType = this.ContentTypes[this.ImageFormat];
this.Image.Save(res.OutputStream, this.ImageFormat);
}
}