我们在MVC的代码中,经常会看到这样的一个 代码

可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢?

其实这个View方法的返回值的类型是ActionResult的子类ViewResult

 

我们查看MVC源码可以看到 ActionResult是个抽象类,  ActionResult 有多个派生类(子类),有的子类又有子类 (例如 ViewResultBase 就有  ViewResult子类 和  PartialViewResult 这2种子类)

每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等。我们来看一下ActionResult派生类关系图

最后的图如下

他们的功能和调用方法 如下

 

类名称 子类名称 说明 对应Controller中的方法名
ContentResult     Content
EmptyResult     Empty
JavaScriptResult     JavaScript
JsonResult   返回Json格式的数据 Json
RedirectResult   使用Response.Redirect重定向页面(返回302状态码直接跳转到其他页面) Redirect
HttpStatusCodeResult HttpNotFoundResult 返回一个404状态码(未找到) HttpNotFound
HttpUnauthorizedResult 返回一个401状态码(未授权状态) HttpUnauthorized
FileResult FileContentResult 通过 文件byte[] 写入Response 返回客户端 File
FilePathResult 通过 文件路径 写入Response 返回客户端
FileStreamResult 通过 Stream 写入Response 返回客户端
ViewResultBase PartialViewResult 调用父类ViewResultBase 的ExecuteResult方法. 
重写了父类的FindView方法. 
寻找用户控件.ascx文件 在MVC4中,寻找cshtml视图
PartialView
ViewResult

调用父类ViewResultBase 的ExecuteResult方法. 
重写了父类的FindView方法. 
寻找视图页面(aspx,cshtml或自定义视图)

Controller的View()方法默认封装ViewResult返回结果

View
RedirectToRouteResult   根据Route规则重定向页面 RedirectToRoute

 

public ActionResult Test()
{
//return Content("文字内容",); //ContentResult 如果是用重载 指定内容的 MIME类型,还可以输出js脚本
//return Content("<ROOT><TEXT>123</TEXT></ROOT>","text/xml",Encoding.UTF8);
//return new EmptyResult(); //EmptyResult 注意需要new来使用. 这里也可以写成 return null
//return JavaScript("alert('xx')"); //JavaScriptResult 这里要注意,前台要通过js或者是jquery来调用这个Action才有效果
//return Redirect("http://www.baidu.com"); //RedirectResult 直接跳转到指定页面
//return HttpNotFound("This Page Not Exist"); //HttpNotFoundResult 返回404 这里还可以自己输入英文文字,如果是汉字,好像乱码
//return new HttpUnauthorizedResult(); //HttpUnauthorizedResult 返回 HTTP 错误 401.0 - Unauthorized 未授权,注意,需要new
//return File(Server.MapPath("~/images/logo.png"), "image/png"); //直接在浏览器中显示图片
//return File(Server.MapPath("~/images/logo.png"), "image/png","aa.png"); //让浏览器下载图片(提示下载,而不是显示图片)
//return RedirectToRoute(new { action = "list" }); //转到指定路由,这里我只设定了Action为list
//return RedirectToAction("Edit", "Home", new { id = 3 }); //转到指定action,可以设置 Action,Controller以及参数
//return PartialView("PartialLogin"); //PartialViewResult //部分视图 一般是前台用ajax来调用
//return View(); //完整视图
return Json(new{id = 1,name = "will",CreatedOn = DateTime.Now}, JsonRequestBehavior.AllowGet); //返回序列化后的json,并且允许ajax使用get方法调用
}

下载

 

 

返回json(已经序列化过了)

 

 

关于上面FileResult下载的3种方式,以及 返回JavaScriptResult和 JsonResult 可以看看下面的2篇文章

了解ASP.NET MVC几种ActionResult的本质:FileResult

了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult

EF5+MVC4系列(8) ActionResult的返回值的更多相关文章

  1. EF5+MVC4系列(12) 在主视图中直接用RenderAction调用子Action,并返回视图(Return View)或者分部视图(Return PartialView); 从主Action传值到子Action使用TempData传值;TempData高级用法

    结论: ViewData 适用于 在一次请求中 传递数据  . 比如我们从 主Action 到 主视图, 然后在 主视图中  用 RenderAction 请求子Action的时候,就是算作 一次请求 ...

  2. EF5+MVC4系列(11)在主视图中用Html.RenderPartial调用分部视图(ViewDate传值);在主视图中按钮用ajax调用子action并在子action中使用return PartialView返回分布视图(return view ,return PartialView区别)

    一:主视图中使用Html.RenderPartial来调用子视图(注意,这里是直接调用子视图,而没有去调用子Action ) 在没有使用母版页的主视图中(也就是设置了layout为null的视图中), ...

  3. 列举mvc ActionResult的返回值

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

  4. EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))

    一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...

  5. EF5+MVC4系列(9) Razor视图引擎的核心原理;@符号的使用;输出html的转义

    一:Razor视图引擎的核心原理 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项 ,他是一个视图引擎 他的核心原理,就是当读取到 @符号的时候,就认为这是开始 ...

  6. EF5+MVC4系列(6) 简单三层的搭配(泛型) 实现 增删改查

    1:项目结构 2:每层添加对其他层的引用,这里我们把除了Web层之外的所有的层生成的文件都放到解决方案下的Library文件夹下,然后每个项目分别来引用里面的dll项目文件. 我们在Model项目上, ...

  7. mvc中actionresult的返回值类型

    以前一直没注意actionresult都能返回哪些类型的类型值(一直用的公司的内部工具类初始化进行返回的),今天跟大家分享一下(也是转载的别人的日志qaq). 首先我们了解一下对action的要求: ...

  8. EF5+MVC4系列(10) mvc的布局页面 _ViewStart.Cshtml

    当客户端请求 /Product/Index的时候, 如果在视图的根目录下有 _ViewStart.Cshtml 就会先执行这个,再去执行 Product文件夹下的Index视图, 如果Product文 ...

  9. EF5+MVC4系列(5) 删除的方法 1:系统推荐的先查询后remove删除的方法 2:自己new一个包含主键的类,然后 attach附加 remove删除;3:使用db.Entry 修改状态删除4:EntityState的几种状态

      我们还是以订单表为例   1:系统推荐的方法,先查询出来,然后调用remove方法进行删除 我们删除id大于等于4的 static void Main(string[] args) { Delet ...

随机推荐

  1. 解决最小化安装Centos7后无法上网的问题,以及安装成功后的基本配置

    发现问题 刚装完最小化的系统后,如果直接ping外网,可能回出现如下情况 解决问题 首先编辑虚拟机的DHCP池: 在弹出的“虚拟网络编辑器”窗口中选择NAT模式的,编辑为其分配地址池: 然后编辑网卡的 ...

  2. 【电子基础】IIC总线工作原理

    IIC总线工作原理 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化. 起始和终止信号 :SCL线为 ...

  3. ansible报错:Failed to connect to the host via ssh: Permission denied

    原因: 没有在ansible管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息. 解决办法: 1.在管理节点生成公钥 ssh-keygen 路径为:~/.ssh/ ...

  4. webpack打包调试react并使用babel编译jsx配置方法

    http://lxj8749.iteye.com/blog/2287074 ********************************************** 安装webpack npm i ...

  5. Python生成一个不含回文字符串的字符串

    [本文出自天外归云的博客园] 回文字符串介绍 回文字符串就是对称的字符串,例如: “ABA” “ABBA” “ABCBA” 题目 给定一个字符串,请发明一种方法,让字符串中不包含回文字符串. 我的解法 ...

  6. C#正则表达式提取HTML中IMG标签的SRC地址

    一般来说一个 HTML 文档有很多标签,比如“<html>”.“<body>”.“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 i ...

  7. Orcale分析函数OVER(PARTITION BY... ORDER BY...)的讲解

    顾名思义,PARTITION 中文是分割的意思,ORDER 是排序的意思,所以翻译一下就是先把一组数据按照制定的字段进行分割成各种组,然后组内按照某个字段排序. 以实际案例来说明这个函数的使用, 首先 ...

  8. C#学习笔记(12)——三种方法操作XML

    说明(2017-7-11 16:56:13): 原文地址: C#中常用的几种读取XML文件的方法 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web. ...

  9. 解决hibernate向mysql插入中文乱码问题(转)

    转载自:http://blog.csdn.net/peditable/article/details/7047573 1.首先需要修改MySQL数据库的配置文件my.ini,此文件放在mysql根目录 ...

  10. CentOS6.3升级Python到2.7.3版本

    http://www.zhangchun.org/the-centos6-3-upgrade-python-to-2-7-3-version/ 查看python的版本 1 python  -V  2 ...