摘要

MVC框架针对HttpResponse进行抽象与多态,使HttpResponse均可表示为ActionResult。那么,抽象多态表现在哪里呢?

//封装一个Action的结果.
public abstract class ActionResult
{
protected ActionResult(); //启用对操作方法结果的处理。
// 参数:
// context: 用于执行结果的上下文。上下文信息包括控制器、HTTP 内容、请求上下文和路由数据。
public abstract void ExecuteResult(ControllerContext context);
}

抽象:因为HttpResponse返回的就是一个结果,这个结果就是一个抽象。表现在ActionResult类的ExecuteResult方法上,所有不同种类的结果都是通过调用此方法输出到浏览器。

多态:因为有多种结果,那么继承与多态就是必须的了。详见下表。

结果类别

父亲层级

描述

EmptyResult

ActionResult

表示一个不执行任何操作的结果

ContentResult

ActionResult

表示用户定义的内容类型

FileResult

ActionResult

表示一个用于将二进制文件内容发送到响应的基类。

FileContentResult

FileResult

将二进制文件的内容发送到响应。

FilePathResult

FileResult

将文件的内容发送到响应

FileStreamResult

FileResult

使用 Stream 实例将二进制内容发送到响应。

JavaScriptResult

ActionResult

将 JavaScript 内容发送到响应。

JsonResult

ActionResult

将 JSON 格式的内容发送到响应。

HttpStatusCodeResult

ActionResult

返回带特定 HTTP 响应状态代码和说明的操作结果的方法。

HttpNotFoundResult

HttpStatusCodeResult

定义一个用于指示未找到所请求资源的对象。

HttpUnauthorizedResult

HttpStatusCodeResult

表示未经授权的 HTTP 请求的结果。

RedirectResult

ActionResult

通过重定向到指定的 URI 来控制对应用程序操作的处理。

RedirectToRouteResult

ActionResult

使用指定的路由值字典来执行重定向的结果。

ViewResult ViewResultBase—>
ActionResult
IView 实例来呈现视图

Usage

我们关注点侧重一些简单的使用。

return Content(jsonResult);   //返回一个文本
if (p == null) return NotFound();  //状态码
return Json(result);   //JSON
return Json(result, JsonRequestBehavior.AllowGet);
 
return View();    //视图
return File(data.ExportExcel(), "application/vnd.ms-excel", fileName);   //Excel文件

总结:所有的ActionResult均可以在Controller中找到,只需要关注构造函数,属性等API即可使用。

public abstract class Controller

MVC ActionResult视图结果的更多相关文章

  1. ASP.NET MVC——Razor视图引擎

    Razor是MVC框架视图引擎,我们今天就来说一说Razor视图引擎. 首先还是来创建一个基础项目叫Razor来演示. 先来定义一个Model叫Product public class Product ...

  2. ASP.NET MVC 5 - 视图

    在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...

  3. [转]ASP.NET MVC 5 - 视图

    在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...

  4. 列举mvc ActionResult的返回值

    8.列举ASP.NET MVC ActionResult的返回值有几种类型? 主要有View(视图).PartialView(部分视图).Content(内容).Json(Json字符串).Javas ...

  5. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  6. asp.net mvc 部分视图加载区别

    ASP.NET MVC 部分视图   ASP.NET(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. [部分视图] ASP.NET MVC 里的部分视图,相当于 Web Form 里的 ...

  7. MVC中视图View向控制器传值的方法

    MVC中视图View向控制器传值的方法步骤如下: 1.index页面: 页面中只需要一个触发事件的按钮

  8. mvc的视图中显示DataTable的方法

    mvc的视图中显示DataTable的方法: 不断的循环画出table @{ ViewBag.Title = "ShowDataTable"; } @using System.Da ...

  9. 第5章——使用 Razor(MVC框架视图引擎)

    Razor 是MVC框架视图引擎的名称. 本章提供 Razor 语法的快速教程,以使你能够识别 Razor 表达式. 本章不打算提供 Razor 的完整参考,而将其视为一个语法速成教程.在本书的后续内 ...

随机推荐

  1. 我们为之奋斗过的C#-----Bank系统

    首先感谢大家抽出宝贵的时间来看这个Bank系统,这是我最近学的Bank系统,你们看我刚一学完就给你们分享了我的所学以及学习的一些经验,所以大家一定要耐心看下去,真的你会有所收获的,不信你看看.下面话不 ...

  2. Shell脚本中cd命令使用

    在写shell脚本的时候发现cd切换目录的时候无法切换,代码是下面的. #!/bin/bash #changedir.sh history cd /home/firefox sleep pwd 我仔细 ...

  3. MySQL关闭过程详解和安全关闭MySQL的方法

    MySQL关闭过程详解和安全关闭MySQL的方法 www.hongkevip.com 时间: -- : 阅读: 整理: 红客VIP 分享到: 红客VIP(http://www.hongkevip.co ...

  4. 【Docker】来自官方映像的 6 个 Dockerfile 技巧

    本文将根据我从官方镜像学到的经验,讲解编写Dockerfile的技巧.   1. 选择Debian  官方镜像的大多数Dockerfile,不管是直接还是通过其他镜像,都是基于Debian的.Dock ...

  5. HTML控件ID和NAME属性及在CS页面获得.ASPX页面中HTML控件的值

    <转载>来自网络 一.ID是在客户端脚本里用!NAME是用于获取提交表单的某表单域信息,在form里面,如果不指定Name的话,就不会发送到服务器端,所以有name属性的控件,必须指定na ...

  6. 取出type="button" 和type="text" 里面的值显示在页面

    <script  type="text/JavaScript> function changeLink() { document.getElementById("nod ...

  7. iOS 定制controller过渡动画 ViewController Custom Transition使用体会

    最近学习了一下ios7比较重要的一项功能,就是 controller 的 custom transition. 在ios7中,navigation controller 中就使用了交互式过渡来返回上级 ...

  8. (转)SQL Server 中的事务和锁(三)-Range S-U,X-X 以及死锁

    在上一篇中忘记了一个细节.Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避 ...

  9. 11.python之线程,协程,进程,

    一,进程与线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行 ...

  10. OC内存管理--zombie对象

    当我们对于内存进行手动管理的时候,会出现两种错误:一种是野指针错误,一种则为内存泄露.这两点也是我们去管理内存时最终要解决的问题. 内存泄漏是指:不在使用的对象,一直保留在内存中未被销毁,一直占有着内 ...