ASP.NET MVCにおけるアクション戻り値タイプ
4429 ワード
Actionの戻り値タイプは全部で十数種類提供されています.その中でよく使われるいくつかのタイプを簡単に要約します.
1、ActionResult
すべてのResultはActionResult抽象クラスから派生しているため、ActionResultはベースクラスとして最も基礎的な機能を提供しており、ActionResultは抽象クラスであり、以下のように宣言されています.
2、EmptyResult
Actionで、空のページを返すには、次のようにします(一般的ではありません).
3、RedirectResult
RedirectResultは、転送を実行するために使用されます.実はRedirectResultは最終的にResponseを呼び出しました.Redirect()は移行するため、現在のプロジェクトまたはネットワークを含む任意のUrlにRedirectResultを使用してジャンプできます.現在のプロジェクトのパスには、UrlHelperが使用されているためです.Content()メソッドはターゲットパスを取得するため、RedirectResultによって渡されるUrlは、現在のプロジェクトディレクトリ識別子~(すなわちアプリケーションディレクトリ)を同時にサポートします.
4、RedirectToRouteResult
RedirectToRouteResultは、RedirectResultにとって、ルーティングにのみ移行可能であり(ルーティングマッチングの結果は、最終的には現在のプロジェクトに対するUrlであり、例えば:/Home/Index)、総じてRedirectResultの最終的な役割と同様に移行を実行する.RedirectResultは任意の指定されたUrlに直接移行し、RedirectToRouteResultは指定されたルーティングに移行する(ルーティングマッチングの結果も最終的には1つのUrlである):
5、ContentResult
ContentResultは、文字列をクライアントに直接出力するために使用されます.ContentResultのExecuteResultメソッドは実際にResponseを呼び出す.Write(string...)、簡単な文字列を出力してページ全体に、Response.Write()はすべて適任なので、ContentResultは特に強いように見えます.
出力されたコンテンツが何も提供されていない場合、ContentResultが提示した結果はEmptyResultと同じであり、最も基本的なタグコンテンツが空のHTMLを出力し、コンテンツが空でない場合、これらのコンテンツを直接出力する(他のHTMLコードは出力しない).
実際ContentResultからActionResultは特別ではありませんが、前のいくつかのResultから見ると、実はResponseにすぎません.RedirectまたはResponse.Write,またバイナリストリームResponseを利用することもできる.OutputStream.Writeはクライアントにファイルをアップロードする......これにより,より多くの実用的な意味のResultを拡張して作成する.例えばXmlResult(ファイル)、RssResult(XmlResultと実は同じ)などです.
1、ActionResult
すべてのResultはActionResult抽象クラスから派生しているため、ActionResultはベースクラスとして最も基礎的な機能を提供しており、ActionResultは抽象クラスであり、以下のように宣言されています.
public abstract class ActionResult {
public abstract void ExecuteResult(ControllerContext context);
}
2、EmptyResult
public class EmptyResult : ActionResult {
private static readonly EmptyResult _singleton = new EmptyResult();
internal static EmptyResult Instance {
get {
return _singleton;
}
}
public override void ExecuteResult(ControllerContext context) {
}
}
Actionで、空のページを返すには、次のようにします(一般的ではありません).
public ActionResult Index()
{
return new EmptyResult();
}
3、RedirectResult
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
string destinationUrl = UrlHelper.Content(Url, context.HttpContext);
context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);
}
RedirectResultは、転送を実行するために使用されます.実はRedirectResultは最終的にResponseを呼び出しました.Redirect()は移行するため、現在のプロジェクトまたはネットワークを含む任意のUrlにRedirectResultを使用してジャンプできます.現在のプロジェクトのパスには、UrlHelperが使用されているためです.Content()メソッドはターゲットパスを取得するため、RedirectResultによって渡されるUrlは、現在のプロジェクトディレクトリ識別子~(すなわちアプリケーションディレクトリ)を同時にサポートします.
4、RedirectToRouteResult
RedirectToRouteResultは、RedirectResultにとって、ルーティングにのみ移行可能であり(ルーティングマッチングの結果は、最終的には現在のプロジェクトに対するUrlであり、例えば:/Home/Index)、総じてRedirectResultの最終的な役割と同様に移行を実行する.RedirectResultは任意の指定されたUrlに直接移行し、RedirectToRouteResultは指定されたルーティングに移行する(ルーティングマッチングの結果も最終的には1つのUrlである):
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
string destinationUrl = UrlHelper.GenerateUrl(RouteName, null /* actionName */, null /* controllerName */, RouteValues, Routes, context.RequestContext, false /* includeImplicitMvcValues */);
if (String.IsNullOrEmpty(destinationUrl)) {
throw new InvalidOperationException(MvcResources.ActionRedirectResult_NoRouteMatched);
}
context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);
}
5、ContentResult
ContentResultは、文字列をクライアントに直接出力するために使用されます.ContentResultのExecuteResultメソッドは実際にResponseを呼び出す.Write(string...)、簡単な文字列を出力してページ全体に、Response.Write()はすべて適任なので、ContentResultは特に強いように見えます.
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType)) {
response.ContentType = ContentType;
}
if (ContentEncoding != null) {
response.ContentEncoding = ContentEncoding;
}
if (Content != null) {
response.Write(Content);
}
}
出力されたコンテンツが何も提供されていない場合、ContentResultが提示した結果はEmptyResultと同じであり、最も基本的なタグコンテンツが空のHTMLを出力し、コンテンツが空でない場合、これらのコンテンツを直接出力する(他のHTMLコードは出力しない).
public ActionResult Index()
{
return Content( "a" );
}
実際ContentResultからActionResultは特別ではありませんが、前のいくつかのResultから見ると、実はResponseにすぎません.RedirectまたはResponse.Write,またバイナリストリームResponseを利用することもできる.OutputStream.Writeはクライアントにファイルをアップロードする......これにより,より多くの実用的な意味のResultを拡張して作成する.例えばXmlResult(ファイル)、RssResult(XmlResultと実は同じ)などです.