「ActionResult クラス (System.Web.Mvc)」の版間の差分
imported>Administrator 編集の要約なし |
imported>Administrator |
||
| (同じ利用者による、間の7版が非表示) | |||
| 1行目: | 1行目: | ||
ActionResult クラスとは、[[ASP.NET MVC]] | ActionResult クラスとは、[[ASP.NET MVC]]の[[アクション・メソッド]]の戻り値として使う各種クラス(ActionResultを継承したクラス)のベースクラスである。 | ||
[[アクションメソッド]]内でActionResult(を継承したクラス)の中身を穴埋めしてやると、[[ASP.NET MVC]]のフレームワーク側でその内容に従い[[HTML]]や[[JSON]]などのHTTPレスポンスが生成される。 | |||
たとえば[[ViewResult]]であれば[[ビューエンジン]](HTMLテンプレートエンジン)を呼び出して[[HTML]]をレンダリングしたり、[[FileResult]]であればファイルを指定するだけでフレームワーク側で適切なHTTPレスポンスヘッダを生成し簡単にダウンロードダイアログを表示したりできる。 | |||
[[ContentResult]]だけでを用いてゴリゴリ書けば20世紀の[[Perl]]で書かれた[[ウェブアプリケーション]]ばりの[[ソースコード]]になること受けあい。困ったらContentResult。まじおすすめ。 | |||
== ActionResultの種類 == | == ActionResultの種類 == | ||
| 14行目: | 14行目: | ||
** [[FileContentResult]] - バイト配列をHTTPレスポンスに書き込む。 | ** [[FileContentResult]] - バイト配列をHTTPレスポンスに書き込む。 | ||
** [[FilePathResult]] - 指定されたファイルパスの中身をHTTPレスポンスに書き込む。 | ** [[FilePathResult]] - 指定されたファイルパスの中身をHTTPレスポンスに書き込む。 | ||
** [[FileStreamResult]] - | ** [[FileStreamResult]] - [[Streamクラス]]の中身をHTTPレスポンスに書き込む。 | ||
* [[HttpUnauthorizedResult]] - 認証要求を送信する。 | * [[HttpUnauthorizedResult]] - 認証要求を送信する。 | ||
* [[JavaScriptResult]] - [[JavaScript]](文字列)を直接HTTPレスポンスに書き込む。 | * [[JavaScriptResult]] - [[JavaScript]](文字列)を直接HTTPレスポンスに書き込む。 | ||
| 22行目: | 22行目: | ||
* [[PartialViewResult]] - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。 | * [[PartialViewResult]] - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。 | ||
* [[ViewResult]] - 指定されたビューをレンダリングして送信する。通常はこれ。 | * [[ViewResult]] - 指定されたビューをレンダリングして送信する。通常はこれ。 | ||
[[ASP.NET MVC 3]]で追加されたActionResult。 | |||
* [[HttpNotFoundResult]] | |||
* [[HttpStatusCodeResult]] | |||
* [[RedirectResult]] - [[コンストラクタ]]の引数が追加され、[[301リダイレクト]]か[[302リダイレクト]]かを選べるようになった。 | |||
=== 独自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> | |||
== 関連項目 == | == 関連項目 == | ||
* [[ASP.NET MVC/アクション]] | |||
* [[ASP.NET MVC]] | * [[ASP.NET MVC]] | ||