掌握 ActionResult
2015-08-18 17:23
375 查看
我在上一篇博客不要停留在表面,MVC 3 我们要深入一些 说明了我们的掌握程度还是不够,还需要我们继续努力。但是有园友质疑说他们认为我说的只是书院派,并不实用,这令作为程序员的我很是生气。好吧,那咱们就一起来学习一下其中的一个知识点:ActionResult吧。希望你不是大牛,没有完全的掌握。
ActionResult 是MVC中Action 执行之后返回的结果,我们可以通过ResultFilter 来横向的操作这些返回数据。可以说在MVC中,只要返回值不是void,或者可以这么说吧,每个Action的返回值都是ActionResult。你可能有些不服气,我怎么知道这些,怎么确定这些是正确的不是误导大家。下面我们来一个一个的看一下ActionResult的小弟们。
上图表示的是ActionResult的家谱图,这些说明了我们可以使用的返回值类型。
现在我们分返回值不同来讨论一下 不同的返回值
ActionResult的执行是通过ExecuteResult(ControllerContext context)来执行。不同的子类最后 会覆盖这个方法来实现自己的业务。
借鉴Artech的那篇了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 我们可以得到action的返回值为null或者void,最后会生成EmptyResult 类型的实例。而如果返回的是普通的数据类型,例如double,string等 都会生成ContentResult 类型的实例,如果为具体的ActionResult或者子类,那么就会返回对应的ActionResult。 看到这儿可能你会有点疑惑,其实这是我在这篇博客中突出要说明的问题。就是Action的返回值问题。可以说Action的返回类型就是ActionResult的实例。
我上面列举出了一些 常用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 是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
相关文章推荐
- 清除页面广告?身为前端,自己做一款简易的Chrome扩展吧
- 编程-杂
- Java单元测试简述
- SQL中实现截取字符串的函数
- caffe中卷积计算方法
- IOS7、8模态半透明弹出框
- Dell PowerEdge R710 R720U盘启动
- 运算符与表达式 运算符
- android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- tomcat数据库边接池配置
- UIWebView复习
- 修改weblogic访问路径应用名称
- 随机三位字母,注册域名时用的
- truncate 和 delete 差异
- 万马股份非公开发行预案披露 拟募资12.58亿元加码新能源
- /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
- tomcat 启动时 报 UnknownHostException
- CXF 客户端,设置超时时长
- 继承
- 根据包名开启一个应用