メインメニューを開く

差分

ActionResult クラス (System.Web.Mvc)

2,326 バイト追加, 2012年4月3日 (火) 01:54
ActionResult クラスとは、[[ASP.NET MVC]]のアクション・メソッドの戻り値として使う各種クラス(ActionResultを継承したクラス)のベースクラス。の[[アクション・メソッド]]の戻り値として使う各種クラス(ActionResultを継承したクラス)のベースクラスである。
アクションメソッド内でActionResult(を継承したクラス)の中身を穴埋めしてやると、ASP[[アクションメソッド]]内でActionResult(を継承したクラス)の中身を穴埋めしてやると、[[ASP.NET MVCのフレームワーク側でその内容に従いHTMLなどのHTTPレスポンスが生成される。たとえばViewResultであればビュー(HTMLテンプレート)を呼び出してレンダリングしたり、FileResultであればファイルを指定するだけでダウンロードダイアログを表示したりできる。MVC]]のフレームワーク側でその内容に従い[[HTML]]や[[JSON]]などのHTTPレスポンスが生成される。
ContentResultだけでを用いてゴリゴリ書けば20世紀のPerlで書かれたウェブアプリケーションばりのソースコードになること受けあい。まじおすすめ。たとえば[[ViewResult]]であれば[[ビューエンジン]](HTMLテンプレートエンジン)を呼び出して[[HTML]]をレンダリングしたり、[[FileResult]]であればファイルを指定するだけでフレームワーク側で適切なHTTPレスポンスヘッダを生成し簡単にダウンロードダイアログを表示したりできる。 [[ContentResult]]だけでを用いてゴリゴリ書けば20世紀の[[Perl]]で書かれた[[ウェブアプリケーション]]ばりの[[ソースコード]]になること受けあい。困ったらContentResult。まじおすすめ。
== ActionResultの種類 ==
** [[FileContentResult]] - バイト配列をHTTPレスポンスに書き込む。
** [[FilePathResult]] - 指定されたファイルパスの中身をHTTPレスポンスに書き込む。
** [[FileStreamResult]] - Streamクラスの中身をHTTPレスポンスに書き込む。[[Streamクラス]]の中身をHTTPレスポンスに書き込む。
* [[HttpUnauthorizedResult]] - 認証要求を送信する。
* [[JavaScriptResult]] - [[JavaScript]](文字列)を直接HTTPレスポンスに書き込む。
* [[PartialViewResult]] - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。
* [[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]]
匿名利用者