我在上一篇博客不要停留在表面,MVC 3 我们要深入一些 说明了我们的掌握程度还是不够,还需要我们继续努力。但是有园友质疑说他们认为我说的只是书院派,并不实用,这令作为程序员的我很是生气。好吧,那咱们就一起来学习一下其中的一个知识点:ActionResult吧。希望你不是大牛,没有完全的掌握。

ActionResult 是MVC中Action 执行之后返回的结果,我们可以通过ResultFilter 来横向的操作这些返回数据。可以说在MVC中,只要返回值不是void,或者可以这么说吧,每个Action的返回值都是ActionResult。你可能有些不服气,我怎么知道这些,怎么确定这些是正确的不是误导大家。下面我们来一个一个的看一下ActionResult的小弟们。

上图表示的是ActionResult的家谱图,这些说明了我们可以使用的返回值类型。

现在我们分返回值不同来讨论一下 不同的返回值

ActionResult的执行是通过ExecuteResult(ControllerContext context)来执行。不同的子类最后 会覆盖这个方法来实现自己的业务。

1 namespace System.Web.Mvc {
2
3 public abstract class ActionResult {
4
5 public abstract void ExecuteResult(ControllerContext context);
6
7 }
8
9 }

借鉴Artech的那篇了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 我们可以得到action的返回值为null或者void,最后会生成EmptyResult 类型的实例。而如果返回的是普通的数据类型,例如double,string等 都会生成ContentResult 类型的实例,如果为具体的ActionResult或者子类,那么就会返回对应的ActionResult。 看到这儿可能你会有点疑惑,其实这是我在这篇博客中突出要说明的问题。就是Action的返回值问题。可以说Action的返回类型就是ActionResult的实例。

 1     public class TestController : Controller
2 {
3 //
4 // GET: /Test/
5
6 public ActionResult Index()
7 {
8 return View(); //返回类型为ViewResult类型
9 }
10
11 public ActionResult GetPartial()
12 {
13 return PartialView();//返回PartialViewResult类型 PartialViewResult 和ViewResult 有一个共同父类ViewResultBase
14 }
15 public void NoReturn()
16 {
17 //虽然说没有返回值,但是在MVC中 确实会生成一个什么都不执行的EmptyResult类型
18 }
19
20 public ActionResult GetNull()
21 {
22 return null;//生成EmptyResult类型实例 其实我们这么想,只要返回值为空 就是EmptyResult
23 }
24
25 public ContentResult GetContent()
26 {
27 return Content("hello");//返回值类型为ContentResult
28 }
29
30 public JavaScriptResult GetJs()
31 {
32 return JavaScript("alert('dsdsds')");//返回值类型为Javascript 可能有时候我们直接调用这个方法 在ie中会提示下载,这是因为没有引入对应的jquery库的原因
33 }
34
35 public JsonResult GetJson()
36 {
37 return Json("{userName:'yuan',password:'yuan'}"); //返回值类型为jsonResult 在这里再啰嗦一句,其实返回值就已经是json,在我们通过ajax调用的时候,不需要eval解析了
38 }
39
40 public FileResult GetStream()
41 {
42 return File(System.Text.Encoding.UTF8.GetBytes("hello"), "text/plain"); //返回值为FileContentResult 在File方法中,第三个参数为一个downLoadName值,如果设置了,则会下载文件,如果
43 //不设置 ,就是在浏览器中打开 FileContentResult FileStreamResult FilePathResult 都是如此
44 }
45
46 public HttpStatusCodeResult NotFound()
47 {
48 return HttpNotFound();//返回值是HttpNotFoundResult 表示的未找到文件 这是在MVC 3中新添加的HttpStatusCodeResult
49 }
50
51 public RedirectResult NotPer()
52 {
53 return Redirect("http://www.asp.net");//重定向 这个为临时重定向 状态码是302
54 }
55 public RedirectResult Per()
56 {
57 return RedirectPermanent("http://www.asp.net"); //永久重定向 状态吗是301
58 }
59
60 }

我上面列举出了一些 常用Action的返回值类型。最重要的我还是要说可以说所有Action的返回值都是ActionResult。

还有Action如何执行?ActionResult如何调用ExecuteResult 方法的?ViewResult的渲染?这些内容等在以后咱们慢慢叙述。但是还是那句话,只有掌握了这些,才可以灵活的运用,在基础上我们多花些时间,将来我们可能省去很多查资料的时间。

马上公司要下班了,我也不写太多了,我再最后说明一下,

虽然说每个ActionResult 的子类都是单独的存在,但是她们之间还是有一定的联系的,比如ContentResult就可以和JsonResult进行互换使用,所以说还需要继续努力。

ActionResult 在表面上可以看到的内容并不多,但是有时候还是会遇到一些问题。

返回值为JsonResult的类型本身就是json数据,不需要进行解析。

返回值为JavascriptResult的js语句,一定要记得在页面中添加引用js。

FileResult的三个子类,可以用来对文件进行操作,其中FilePathResult是通过 response.TransmitFile(FileName); 来实现的,在内存中没有缓存,可以输出大文件,没有断点续传功能。

FileStreamResult是通过文件流来进行文件下载的,Stream outputStream = response.OutputStream;    outputStream.Write(buffer, 0, bytesRead); 是通过response.outputStream输出的。

FileContentResult  是通过二进制来输出文件的。还有就是如果在File方法的第三个参数中填写了下载名称,那么就相当于下载,而不会在浏览器中显示。

网摘自  http://www.cnblogs.com/jiagoushi/archive/2013/01/24/2875454.html

掌握 ActionResult的更多相关文章

  1. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

  2. Razor语法&ActionResult&MVC

    Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...

  3. ASP.NET MVC自定义ActionResult实现文件压缩

    有时候需要将单个或多个文件进行压缩打包后在进行下载,这里我自定义了一个ActionResult,方便进行文件下载 using System; using System.Collections; usi ...

  4. C# MVC 自定义ActionResult实现EXCEL下载

    前言 在WEB中,经常要使用到将数据转换成EXCEL,并进行下载.这里整理资料并封装了一个自定义ActionResult类,便于使用.如果文章对你有帮助,请点个赞. 话不多少,这里转换EXCEL使用的 ...

  5. ASP.NET MVC中多种ActionResult用法总结

    最近一段时间做了个ASP.NET MVC4.0的项目,项目马上就要结束了,今天忙里偷闲简单总结一下心得: 1. 如果Action需要有返回值的话,必须是ActionResult的话,可以返回一个Emp ...

  6. 一个ActionResult中定位到两个视图—<团委项目>

         在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,"约定大于配置&quo ...

  7. MVC - Action和ActionResult

    Action 定义在Controller中的Action方法返回ActionResult对象,ActionResult是对Action执行结果的封装,用于最终对请求进行响应.HTTP是一个单纯的采用请 ...

  8. MVC中几种常用ActionResult

    一.定义 MVC中ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等 ...

  9. ASP.NET MVC 拓展ActionResult实现Html To Pdf 导出

    之前实现了html直接转换为word文档的功能,那么是否也同样可以直接转换为pdf文档呢,网上搜了下html to pdf 的开源插件有很多 如:wkhtmltopdf,pdfsharp,itexts ...

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

    在之前的两篇文章(<EmptyResult & ContentResult>和<FileResult>)我们剖析了EmptyResult.ContentResult和F ...

随机推荐

  1. ShowcaseView-master

      ShowcaseView.rar

  2. 期望-pku-oj-1055:Tree

    题目链接: http://poj.openjudge.cn/practice/1055/ 题目意思: 给出的树最大节点个数为n的情况下,求树上点深度的期望. 解题思路: 数学期望公式的推导. 自己先画 ...

  3. MST最小生成树及克鲁斯卡尔(Kruskal)算法

    最小生成树MST,英文名如何拼写已忘,应该是min spaning tree吧.假设一个无向连通图有n个节点,那么它的生成树就是包括这n个节点的无环连通图,无环即形成树.最小生成树是对边上权重的考虑, ...

  4. iOS开发——高级技术&二维码功能的实现

    二维码功能的实现 ZBarSDK,一个比较优秀的开源项目,使用起来也很简单. ZBarSDK是一个开源的SDK,可从这里下载到源码,该SDK实现了识别和读取各种条形码,包括EAN-13/UPC-A, ...

  5. js源码保护

    js的不可读化处理分为三个方面:压缩(compression).混淆(obfuscation) 和加密(encryption). (不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换 ...

  6. 信号之alarm和pause函数

    使用alarm函数可以设置一个计时器,在将来某个指定的时间,该计时器会超时.当计时器超时时,产生SIGALRM信号.如果不忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程. #incl ...

  7. 项目源码--Android高质量图片浏览器源码

      下载源码   技术要点: 1. 浏览所有格式的图片 2. 图片缓存到数据库 3. Sqlite数据库的高级应用 4. 文件夹缩图显示 5. 多点触控技术 6. 动画技术 7. 支持超高清图片 8. ...

  8. java_包含抽象方法的枚举类

    package ming; enum Operation { PLUS { public double eval(double x, double y) { return x + y; } }, MI ...

  9. 内网架设SVN服务器相关设置

    环境说明:        外网IP为静态IP,工作室内有多台电脑,公用一台路由器.想要在某台电脑上架设SVN服务器,方便团队开. 解决方案: 一.准备工作1.获取 Subversion 服务器程序到官 ...

  10. Linux学习之路:认识shell和bash

    一.shell  计算机硬件的直接控制者是操作系统的内核(kernel),因为内核的重要性,所以作为用户的我们是无法直接操作内核的,所以我们需要shell调用应用程序或者双击打开安装的应用软件与内核之 ...