本文导读:MVC中ActionResult是Action的返回结果。ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等。ActionResult是一个抽象类,它定义了唯一的ExecuteResult方法,参数为一个ControllerContext,下面为您介绍MVC中的ActionResult 的用法

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

一、ActionResult派生类关系图

二、常见的几种ActionResult

1、ContentResult

返回简单的纯文本内容,可通过ContentType属性指定应答文档类型,通过ContentEncoding属性指定应答文档的字符编码。可通过Controller类中的Content方法便捷地返回ContentResult对象。如果控制器方法返回非ActionResult对象,MVC将简单地以返回对象的ToString()内容为基础产生一个ContentResult对象。

C# 代码   复制

public ContentResult RSSFeed()

{ Story[] stories = GetAllStories(); // Fetch them from the database or wherever // Build the RSS feed document string encoding = Response.ContentEncoding.WebName; XDocument rss = new XDocument(new XDeclaration("1.0", encoding, "yes"), new XElement("rss", new XAttribute("version", "2.0"), new XElement("channel", new XElement("title", "Example RSS 2.0 feed"), from story in stories select new XElement("item", new XElement("title", story.Title), new XElement("description", story.Description), new XElement("link", story.Url) ) ) ) ); return Content(rss.ToString(), "application/rss+xml");
}

2、EmptyResult

返回一个空的结果。如果控制器方法返回一个null,MVC将其转换成EmptyResult对象。

3、RedirectResult

表示一个连接跳转,相当于ASP.NET中的Response.Redirect方法。对应的Controller方法为Redirect。

C# 代码   复制

public override void ExecuteResult(ControllerContext context) {if (context == null) {throw new ArgumentNullException("context");}if (context.IsChildAction) {throw new InvalidOperationException(MvcResources.RedirectAction_CannotRedirectInChildAction);}string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);context.Controller.TempData.Keep();context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);
}

4、RedirectToRouteResult

同样表示一个调转,MVC会根据我们指定的路由名称或路由信息(RouteValueDictionary)来生成Url地址,然后调用Response.Redirect跳转。对应的Controller方法为RedirectToAction和RedirectToRoute。

5、ViewResult:

表示一个视图结果,它根据视图模板产生应答内容。对应Controller方法为View。

6、PartialViewResult:

表示一个部分视图结果,与ViewResult本质上一致,只是部分视图不支持母版,对应于ASP.NET,ViewResult相当于一个Page,而PartialViewResult则相当于一个UserControl。它对应的Controller方法为PartialView。

7、HttpUnauthorizedResult:

表示一个未经授权访问的错误。MVC会向客户端发送一个401的应答状态。如果在web.config中开启了表单验证(authentication mode="Forms"),则401状态会将Url转向指定的loginUrl链接。

8、JavaScriptResult:

本质上是一个文本内容,只是将Response.ContentType设置为 application/x-javascript,此结果应该和MicrosoftMvcAjax.js脚本配合使用,客户端接收到Ajax应答后,将判断Response.ContentType的值,如果是application/x-javascript,则直接eval执行返回的应答内容。此结果类型对应的Controller方法为JavaScript。

9、JsonResult:

表示一个JSON结果。MVC将Response.ContentType设置为application/json,并通过JavaScriptSerializer类将指定对象序列化为Json表示方式。需要注意,默认情况下,MVC不允许GET请求返回JSON结果,要解除此限制,在生成JsonResult对象时,将其JsonRequestBehavior属性设置为JsonRequestBehavior.AllowGet。此结果对应的Controller方法为Json。

C# 代码   复制

class CityData { public string city; public int temperature; }
public JsonResult WeatherData()
{ var citiesArray = new[] { new CityData { city = "London", temperature = 68 }, new CityData { city = "Hong Kong", temperature = 84 } }; return Json(citiesArray);
}

10、FilePathResult、FileContentResult、FileStreamResult: 这三个类继承于FileResult,表示一个文件内容,三者的区别在于,FilePath通过路径传送文件到客户端,FileContent通过二进制数据的方式,而FileStream是通过Stream的方式来传送。Controller为这三个文件结果类型提供了一个名为File的重载方法。

FilePathResult:直接将一个文件发送给客户端

C# 代码   复制

public FilePathResult DownloadReport()

{ string filename = @"c:\\files\\somefile。pdf"; return File(filename, "application/pdf", "AnnualReport。pdf");
}

FileContentResult:返回byte字节给客户端比如图片

C# 代码   复制

public FileContentResult GetImage(int productId)

{ var product = productsRepository.Products.First(x => x.ProductID == productId); return File(product.ImageData, product.ImageMimeType);
}
<img src="<%: Url.Action("GetImage", "Products",  new { Model.ProductID }) %>" />

FileStreamResult:返回流

C# 代码   复制

public FileStreamResult ProxyExampleDotCom()

{ WebClient wc = new WebClient(); Stream stream = wc.OpenRead(http://www.studyofnet.com/); return File(stream, "text/html");
}

转载于:https://www.cnblogs.com/zxtceq/p/8117892.html

MVC中的ActionResult相关推荐

  1. 理解ASP.NET MVC中的ActionResult [转 深山老林]

    http://www.cnblogs.com/wlb/archive/2009/12/10/1620790.html 通常我们在一个ASP.NET MVC项目中创建一个Controller的时候,In ...

  2. ASP.NET MVC中常用的ActionResult类型

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

  3. MVC 中的 ViewModel

    此文章总结自:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applica ...

  4. 通过源代码研究ASP.NET MVC中的Controller和View(二)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...

  5. MVC中实现多按钮提交(转)

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  6. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...

  7. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  8. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...

  9. MVC中实现 加载更多...

    需要实现的功能: 数据太多想初次加载部分数据,在底部加上"加载更多"按钮 点击后加载第二页数据(从数据库只取指定页数据)后接在已有数据后面(类似于android中的下拉加载更多) ...

最新文章

  1. apache调优详解
  2. python之dict基础类型
  3. 面向对象的5条基本设计原则----拜读大作后
  4. 从Folly源码学C++ 11的新特性
  5. SqlServer一些用法
  6. 用python从0开始创建一个区块链,从代码深入理解区块链
  7. 使用setup函数替代beforeEach函数进行Angular单元测试
  8. Android之应用坐标系统全面详解
  9. java弹出虚拟键盘_JS实现电脑虚拟键盘的操作
  10. swift 原生给h5发消息_Swift - 使用HTML5进行iOS开发(将HTML5打包成iOS应用)
  11. SpringBoot中fastJson返回数据展示null字段(响应值为null时字段被过滤)
  12. 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)
  13. py3 写的基于GUI 的 旁注 wwwscan集成扫描工具
  14. 机器学习之随机森林算法
  15. ffmpeg没有bin文件
  16. 茨威格为什么自杀(1942)?
  17. SQL Server获取当年第一天当年最后一天当月第一天当月最后一天
  18. C#读取Excel数据在CAD上展图
  19. 霍尔效应——ABS传感器
  20. Bootstrap入门使用

热门文章

  1. string转map集合_[系列文章] Go - Map 集合
  2. mysql 5.7 多实例主从_mysql-5.7.20源码安装 + 多实例 + 主从复制
  3. php7可以做什么开发,php7 图形用户界面GUI 开发怎么做?看完这个代码你就明白了...
  4. android 关于页面,解析android中的帮助、about、关于作者、HELP等提示页面
  5. laravel框架集成PHPExcel讲解及demo
  6. 一个星期+4轮面试终拿下offer,进阶学习
  7. 【深度学习】基于Pytorch的线性模型概念辨析和实现(一)
  8. 【深度学习入门到精通系列】医学图像预处理—灰度转换代码(G通道)
  9. Android移动开发之【Android实战项目】Textview各项属性(全)
  10. mysql中设置字符集语句_mysql设置字符集