asp.net mvc Controller控制器返回类型
ASP.NET MVC包括了执行常见任务的ActionResult类型。这些类型罗列在表5-1中。每个类型都将在随后的小节中详细讨论。
表5-1 动作结果的类型及其说明
动作结果的类型 |
说 明 |
EmptyResult |
代表一个空值或空的响应。不进行任何操作 |
ContentResult |
将指定的内容作为文本直接写入响应中 |
JsonResult |
串行化提供到JSON中的对象并将 JSON写入响应中 |
RedirectResult |
将用户重新定向到给定的URL中 |
RedirectToRouteResult |
将用户重新定向到通过路由选 择参数指定的URL中 |
ViewResult |
调用进视图引擎以将视图呈现到响应中 |
PartialViewResult |
与ViewResult相似,除了没有将局部 视图呈现给响应之外,通常会响应AJAX请求 |
FileResult |
用作一组结果的基类,这组结果将二 进制的响应编写到流中。这对于将文 件返回给用户非常有用 |
FilePathResult |
继承自FileResult并返回,将文件写入 基于文件路径的响应中 |
FileContentResult |
继承自FileResult并返回,将一个字 节数组写入响应中 |
FileStreamResult |
继承自FileResult并返回,将一个 流写入响应中 |
JavaScriptResult |
用于在客户机上立刻执行来自服务 器的JavaScript代码 |
1. EmptyResult
顾名思义,这一结果用来指明架构不做任何事情。这遵循的是常见的设计模式,称作Null Object模式,它将通过一个实例替换空的引用。在该实例中,ExecuteResult方法具有一个空的实现。该设计模式在Martin Fowler的重构书中详细介绍过。更多内容参见http://martinfowler.com/bliki/refactoring.html。
2. ContentResult
这一结果将其指定的内容(通过Content属性)写入响应中。此外,这个类还支持指定内容的编码(通过ContentEncoding属性)以及内容类型(通过ContentType属性)。
如果没有指定编码,那么就使用对当前HttpResponse实例的内容编码。HttpResponse的默认编码是在web.config的全局化元素中指定的。
同样,如果没有指定内容类型,则使用当前HttpResponse实例上的内容类型设置。HttpResponse默认的内容类型是"text/html"。
3. FileResult
除了用于将二进制内容(例如,磁盘上的Microsoft Word文档或来自SQL Server中blob列的数据)写入响应中之外,该结果非常类似于ContentResult。设置结果上的FileDownloadName属性将设置Content-Disposition题头的适当值,这导致一个文件下载对话框出现在用户面前。
注意,FileResult是一个抽象基类,用于如下3个不同的文件结果类型:
FilePathResult
FileContentResult
FileStreamResult
使用方法通常遵循的是"工厂模式(factory pattern)",在该模式中,返回的具体类型取决于调用了哪一个File方法(将在随后讨论)的重载。
4. JsonResult
该结果使用JavaScriptSerializer类来将其内容(通过Data属性指定)串行化为JSON(JavaScript Object Notation)格式。对于简单的Ajax情形,如果需要一个动作方法来以一种易于为JavaScript消费的格式返回数据,那么这一结果将非常有用。
与ContentResult一样,JsonResult的内容编码和内容类型可以通过属性来设置。唯一的区别在于默认的ContentType是"application/json",而不是该结果对应的"text/html"。
注意,JsonResult串行化整个对象图表。因此,如果提供一个ProductCategory对象(含有一个20个Product实例的集合),那么还将串行化每个Product实例并将其包含到发送给响应的JSON中。现在,假设每个Product都含有一个包含了20个Order实例的Orders集合,那么可以想象,JSON响应可能迅速膨胀。
目前,尚没有方法来限制串行化成JSON的数量,这样对于含有大量属性和集合的对象(如通常由LINQ To SQL生成的对象)而言,可能就会出现问题。推荐的方法是创建一个含有具体信息的类型,这些信息就是想要包含到JsonResult中的信息。这一情形正是匿名类型派上用场的地方。
例如,在前面的情形中,没有串行化ProductCategory的实例,而是使用了一个匿名的对象初始化来仅传递那些需要的数据,如下面的代码样本所示:
- public ActionResult PartialJson()
- {
- var category = new ProductCategory { Name="Partial"};
- var result = new { Name = category.Name
- , ProductCount = category.Products.Count };
- return Json(result);
- }}
注意:
该方法没有直接实例化JsonResult,而是使用了Json辅助方法。本章后面将进一步讨论辅助方法。
在该样本中,所有需要的是类别名称以及该类别对应的产品计数。因此,没有串行化整个对象图表,而是取出来自实际对象的需要的信息,并将该信息存储在一个名为result的匿名类型实例中。然后,将该实例发送给响应,而不是整个对象图表。
5. JavaScriptResult
JavaScriptResult用来在客户机上执行来自服务器的JavaScript。例如,在使用内置的Ajax辅助方法发送对动作方法的请求时,方法可能只是返回一些JavaScript,它将在到达客户机时立刻执行:
- public ActionResult DoSomething() {
- script s = "$('#some-div').html('Updated!');";
- return JavaScript(s);
- }
这将通过如下的代码来调用:
- <%= Ajax.ActionLink("click", "DoSomething", new AjaxOptions()) %>
- <div id="some-div"></div>
这里假设引用了AJAX库和jQuery。
6. RedirectResult
该结果将执行重新指向指定URL的HTTP(通过Url属性设置)。从内部讲,该结果调用HttpResponse.Redirect方法,这将HTTP状态码设置为HTTP/1.1 302 Object Moved,导致浏览器立刻发送一个对指定URL的新请求。
从技术的角度讲,只要直接调用动作方法中的Response.Redirect,但是使用RedirectResult将该动作推迟到动作方法完成其工作之后。这在对动作方法进行单元测试时非常有用,而且帮助保持底层的架构细节位于动作方法外部。
7. RedirectToRouteResult
执行HTTP重定向的方式与执行RedirectResult的方式一样,但是不同的是,没有直接指定一个URL,这一结果使用路由选择的API来确定重定向的URL。
注意,目前有两种方便的方法(如下面定义的),RedirectToRoute和RedirectToAction,这两个方法将返回该类型的结果。
8. ViewResult
该结果是最广为使用的动作结果类型。它调用IViewEngine实例的FindView方法,返回IView的一个实例。随后,ViewResult调用IView实例上的Render方法,它将呈现响应的输出。一般来说,这将把指定的视图数据(即动作方法准备显示在视图中的数据)融入到一个模板中(该模板将对被显示的数据进行格式化)。
第6章将更详细地讨论视图的问题。
9. PartialViewResult
除了调用FindPartialView方法(而不是FindView)来定位视图之外,该结果的工作方式与ViewResult的工作方式完全相同。它用来呈现局部视图(如ViewUserControl),而且在局部更新的时候(即使用AJAX通过大块HTML更新页面部分时),它很有用。
转载:
原文地址:http://book.51cto.com/art/201006/205372.htm
asp.net mvc Controller控制器返回类型的更多相关文章
- .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)
阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...
- 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...
- .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
- 二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
- ASP.NET Core WebAPI控制器返回类型的最佳选项
前言 从.NET Core 2.1版开始,到目前为止,控制器操作可以返回三种类型的WebApi响应.这三种类型都有自己的优点和缺点,但都缺乏满足REST和高可测性的选项. ASP.NET Core中可 ...
- NET/ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
- ASP.NET MVC – 关于Action返回结果类型的事儿(上)
原文:ASP.NET MVC – 关于Action返回结果类型的事儿(上) 本文转自:博客园-文超的技术博客 一. ASP.NET MVC 1.0 Result 几何? Action的 ...
- ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
上一章节中对路由的注册和匹配过程进行了介绍,知道了MVC的Http请求最终是交由MvcHandler处理的,而其处理过程就是对Controller的创建.执行和释放. 本章将从以下几点进一步对上面提到 ...
- ASP.NET MVC 5 - 控制器
MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...
随机推荐
- codeM编程大赛E题 (暴力+字符串匹配(kmp))
题目大意:S(n,k)用k(2-16)进制表示1-n的数字所组成的字符串,例如S(16,16)=123456789ABCDEF10: 解题思路: n最大50000,k最大100000,以为暴力会超时. ...
- 深入理解Git - 一切皆commit
在对 git 有了基本理解和知道常规操作之后,如何对 git 的使用有进一步的理解? 一切皆 commit 或许是个不错的理解思路. 本文将从『一切皆 commit 』的角度,通过 git 中常见的名 ...
- webpack+vue-cli中代理配置(proxyTable)
在做vue的项目时,用到webpack打包工具,我们会发现本地开发开启的node服务地址请求接口的地址存在跨域问题.本地开启的服务地址是 http://localhost:8080 而服务器的地址是 ...
- forof循环
一.语法 1.遍历数组 let myArr=[1,2,3,4,5]; for (let ele of myArr) { console.log(ele); } let myArr=[1,2,3,4,5 ...
- [BZOJ3585]mex(莫队+分块)
显然可以离线主席树,这里用莫队+分块做.分块的一个重要思想是实现修改与查询时间复杂度的均衡,这里莫队和分块互相弥补. 考虑暴力的分块做法,首先显然大于n的数直接忽略,于是将值域分成sqrt(n)份,每 ...
- Spring(完成毕业设计后的简单回顾)
最近刚刚做完了毕业设计,在开发时用的是spring框架,做的时候踩了好多坑,又把当初的笔记给翻了翻,做一次简单的回顾 # 1.Spring是什么? 是一个开源的.用于简化企业级应用开发的应用开发框架. ...
- hdu 5775 Bubble Sort 树状数组
Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...
- [原创] 浅谈ETL系统架构如何测试?
[原创] 浅谈ETL系统架构如何测试? 来新公司已入职3个月时间,由于公司所处于互联网基金行业,基金天然固有特点,基金业务复杂,基金数据信息众多,基金经理众多等,所以大家可想一下,基民要想赚钱真不容易 ...
- WAP2.0(XHTML MP)基础介绍
(一)XHTML MP 介绍XHTML MP(eXtensible HyperText Markup Language Mobile Profile)WAP2.0与WCSS(WAP CSS /WAP ...
- CMSIS-DAP for STLink V2.1 and STLink v2.1 mini adapter
CMSIS-DAP V1 V2