ActionResult的返回类型

  ActionResult是控制器方法执行后返回的结果类型,控制器方法可以返回一个直接或间接从ActionResult抽象类继承的类型,如果返回的是非ActionResult类型,控制器将会将结果转换为一个ContentResult类型。默认的ControllerActionInvoker调用ActionResult.ExecuteResult方法生成应答结果。

ActionResult是一个抽象类, 在Action中返回的都是其派生类,具体如下:

类名 抽象类 父类 功能
ContentResult     根据内容的类型和编码,数据内容.
EmptyResult     空方法.
FileResult abstract   写入文件内容,具体的写入方式在派生类中.
FileContentResult   FileResult 通过 文件byte[] 写入文件.
FilePathResult   FileResult 通过 文件路径 写入文件.
FileStreamResult   FileResult 通过 文件Stream 写入文件.
HttpUnauthorizedResult     抛出401错误
JavaScriptResult     返回javascript文件
JsonResult     返回Json格式的数据
RedirectResult     使用Response.Redirect重定向页面
RedirectToRouteResult     根据Route规则重定向页面
ViewResultBase abstract   调用IView.Render()
PartialViewResult   ViewResultBase 调用父类ViewResultBase 的ExecuteResult方法. 
重写了父类的FindView方法. 
寻找用户控件.ascx文件
ViewResult   ViewResultBase 调用父类ViewResultBase 的ExecuteResult方法. 
重写了父类的FindView方法. 
寻找页面.aspx文件

  示例代码:

 public class ActionResultController : Controller
    {

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult ContentResult()
        {
            return Content("Hi, 我是ContentResult结果");
        }

        public ActionResult EmptyResult()
        {
            return new EmptyResult();
        }

        public ActionResult FileResult()
        {
            var imgPath = Server.MapPath("~/demo.jpg");
            return File(imgPath, "application/x-jpg", "demo.jpg");
        }

        public ActionResult HttpNotFoundResult()
        {
            return HttpNotFound("Page Not Found");
        }

        public ActionResult HttpUnauthorizedResult()
        {
            //未验证时,跳转到Logon
            return new HttpUnauthorizedResult();
        }

        public ActionResult JavaScriptResult()
        {
            string js = "alert(\"Hi, I‘m JavaScript.\");";
            return JavaScript(js);
        }

        public ActionResult JsonResult()
        {
            var jsonObj = new
            {
                Id = 1,
                Name = "小铭",
                Sex = "男",
                Like = "足球"
            };

            return Json(jsonObj, JsonRequestBehavior.AllowGet);
        }

        public ActionResult RedirectResult()
        {
            return Redirect("~/demo.jpg");
        }

        public ActionResult RedirectToRouteResult()
        {
            return RedirectToRoute(new
            {
                controller = "Hello",
                action = ""
            });
        }

        public ActionResult ViewResult()
        {
            return View();
        }

        public ActionResult PartialViewResult()
        {
            return PartialView();
        }

        //禁止直接访问的ChildAction
        [ChildActionOnly]
        public ActionResult ChildAction()
        {
            return PartialView();
        }

        //正确使用ChildAction
        public ActionResult UsingChildAction()
        {
            return View();
        }

    }
时间: 2024-08-08 12:45:44

ActionResult的返回类型的相关文章

ActionResult 的返回类型

大多数操作方法会返回从 ActionResult 中派生的类的实例. ActionResult 类是所有操作结果的基础. 不过,也存在不同的操作结果类型,具体取决于操作方法执行的任务. 例如,最常见的操作是调用 View 方法. View 方法返回从 ActionResult 中派生的 ViewResult 类的实例. 您可以创建返回任意类型(如字符串.整数或布尔值)的对象的操作方法. 这些返回类型在呈现到响应流之前包装在合适的 ActionResult 类型中. 下表显示了内置操作结果类型以及

Web API 方法的返回类型、格式器、过滤器

一.Action方法的返回类型 a) 操作方法的返回类型有四种:void.简单或复杂类型.HttpResponseMessage类型.IHttpActionResult类型. b) 如果返回类型为void,请求结束后HTTP状态码为204(No Content),如果返回类型为复杂类型,则对象会被转化为Json字符串后传输. c) 从图示的Web API的大致交互过程可以看到,Controll返回的是HttpResponseMessage类型,然后转换为HttpResponse提供给调用端.同时

asp.net mvc 3.0 知识点整理 ----- (2).Controller中几种Action返回类型对比

通过学习,我们可以发现,在Controller中提供了很多不同的Action返回类型.那么具体他们是有什么作用呢?它们的用法和区别是什么呢?通过资料书上的介绍和网上资料的查询,这里就来给大家列举和大致的概括下. (1). ActionResult(base):最基本的Action类型,返回其他类型都可以写ActionResult. (2). ContentResult:返回ContentResult用户定义的内容类型. public ActionResult Content() { return

C# web api 返回类型设置为json的两种方法

每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心! 悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的

EF5+MVC4系列(8) ActionResult的返回值

我们在MVC的代码中,经常会看到这样的一个 代码 可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢? 其实这个View方法的返回值的类型是ActionResult的子类ViewResult   我们查看MVC源码可以看到 ActionResult是个抽象类,  ActionResult 有多个派生类(子类),有的子类又有子类 (例如 ViewResultBase 就有  ViewResult子类 和  PartialViewResult 这2种子类) 每个

MVC控制器常用方法返回类型

控制器的常用方法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; using System.IO; namespace MvcRazorDemo { public class DemoController : Controller { /// <summary> /// htt

Covariant Returen Types(协变返回类型)

基类virtual func返回类型为某个类(class Super)的ptr或ref,子类重写的virtual func返回类型可改为该类子类(class Sub : public Super)的ptr或ref. class Base { public: virtual Base* clone() const { return new Base(*this); } virtual ~Base() {} }; class Derived : public Base { public: virtu

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

C#控制台基础 返回类型为void的 int 类型参数的委托与拉姆塔表达式

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 //返回类型为void的 int 类型参数的委托 10 public delegate void MyFirst(int num); 11 class P