asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result

 平时我们在Action中编码的时候,我们都知道所有的Action返回值类型都是ActionResult,并且我们的返回值也是各种奇葩,比如:Json(),Content(),

View()等等。。。当你写这个代码的时候,你是不是有一种强烈的偷窥欲。。。那这篇我们就一起来看一看。

一:实例代码

public class HomeController : Controller
 {
 public ActionResult Index()
 {
 ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

 return View();
 }

 public ActionResult About()
 {
 ViewBag.Message = "Your app description page.";

 return Json("");
 }

 public ActionResult Contact()
 {
 ViewBag.Message = "Your contact page.";

 return Content("");
 }
 }

1. View()

  还是老规矩,我们用ILSpy来看看它的源码会是怎样。。。


从上面的图中,我们大概可以看到,其实我们在Action中做View()的时候,其实内部仅仅是做了一个new ViewResult的操作,然后代码继续会从

ViewEngineCollection这个集合中去寻找我需要的View,那就有人疑问了,ViewEngineCollection这个集合怎么填充的,其实我也不知道。。。

但我们可以看到,如果在Collection中能找到View的话,会返回一个viewEngineResult回去,如果没有找到则通过SearchedLocations将寻找路

径全部打印出来。。。就像下面这样,是不是很有意思?


2.Json()

在当前富客户端的大背景下,几乎没有程序不Json()吧,我们通常都是把Model塞给Json就行了,到了客户端就已经是Json字符串了,这个肯定

是毫无疑问的,下面我们也是继续看看它的源码里面到底怎么玩的。。。


从上面的代码中可以看到,其实所谓的Json并没有什么。。。仅仅是response.write(xxxx.serialize(xxxx))而已, 本以为是什么高大上的东西。。。

其实呢??? 你懂的。。。

3. Content()

当你知道了Json()之后,我觉得你应该对Content的原理已经很清楚了,因为Json还是需要用javascriptSerializer序列化器来序列化Model,然后才

是真的将序列化后的json送到客户端,你也猜到Content根本就不会这么做,而是仅仅将string喷到前端即可。。。对不对。。。


好了,夜深了。。。就简单分析到这里了,其他的几个Result都是在Controller类下面的,如果你愿意用ILSpy去查看的话,那么一切都不是问

题,比如下面我在Controller中一个简单的截图就有5个Result了。。。

时间: 2024-11-02 12:58:26

asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result的相关文章

asp.net mvc 之旅—— 第一站 从简单的razor入手

记得2011年mvc3刚出来的时候,我们就有幸将 mvc3 用在我们团购项目上,当时老大让我们用一个星期时间来熟悉mvc,幸好园子里面的老朋友DR 正在写mvc3系列,也恭喜这个系列文章被整理成专题供后来者学习,详见:http://www.cnblogs.com/highend/archive/2011/08/04/aspnet_mvc3_ contents.html,2013年进携程的时候,也开心的看到公司正在将webform升级到mvc3,我们知道mvc在更新到3的时候相比之前已经有了重大的

Sql Server之旅——第二站 理解万恶的表扫描

原文:Sql Server之旅--第二站 理解万恶的表扫描 很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转...这个着急也只有当事人才 明白,后来听说有个什么"评估执行计划",后来的后来才明白应该避免表扫描... 一:表扫描 1.现象 "表扫描"听起来很简单,不就是一行一行的扫嘛,你要说"执行计划"的话,我也会玩,为了更可观,我build一个表,再插入三行数据,如下图:   上面的P

Javascript之旅——第二站:对象和数组

原文:Javascript之旅--第二站:对象和数组   一觉睡到中午,本来准备起来洗洗继续睡,不过想想没辙,还得继续这个系列,走过变量的第一站,第二站我们再来看看对象和数组.   一:对象   说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,在web编程中几乎天天用到的就是JSON.是的, 这就是一个对象,不过这个对象下面的字段都是字符串和值类型,如下图. 1 var delivery = { 2 no: 1, 3 sendtime: "2014-11-25&

返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 3.0 新特性之 Controller: Global Action Filter 可以在标记为 ChildActionOnly 的 Action 上使用 OutputCa

ASP.NET MVC 5 入门教程 (2) 控制器Controller

原文:ASP.NET MVC 5 入门教程 (2) 控制器Controller 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-controller.html 上一节:ASP.NET MVC 5 入门教程 (1) 新建项目 下一节:ASP.NET MVC 5 入门教程 (3) 路由route 源码下载:点我下载 顾名思义,一个MVC项目是由M-Model-模型.V-View-视图.C-Controller-

Asp.net Mvc Framework在.net 2.0/IIS6下运行,程序示例

Asp.net Mvc Framework在.net 2.0/IIS6下运行,补全   中我提到了完整的方法 但是有些朋友还是不太明白,这里我给出一个现成的工程   发布后将生成的文件与DLL复制到IIS或虚拟主机目录下即可   http://files.cnblogs.com/chsword/dotnet2.rar

ASP.NET MVC中的cshtml页面中的下拉框的使用

ASP.NET MVC中的cshtml页面中的下拉框的使用 用上@Html.DropDownList 先记下来..以做备忘...

《站长》俱乐部18城市互动之旅第二站郑州站即将启航

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最新消息,<站长>俱乐部举办的"2009全国18城市互动之旅"活动第二站郑州站即将启航,6月29日上午活动将在美丽的绿城郑州华龙宾馆举行.康盛创想副总裁李明顺.百度联盟发展部产品运营经理徐嘉.世纪互联副总裁许广彬等将出席康盛创想"将增长进行到底"社区运营培训相关活动. 作为<站长>俱乐部为全国会员提供的本年度重点服务项目之一,"2009全国18城市互动之旅"活动郑州站旨在为郑

ASP.NET MVC是如何运行的(3): Controller的激活

ASP.NET MVC的URL路由系统通过注册的路由表对HTTP请求进行解析从而得到一个用于封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication的PostResolveRequestCache事件进行注册实现的.RouteData中已经包含了目标Controller的名称,现在我们来进一步分析真正的Controller对象是如何被激活的.我们首先需要了解一个类型为MvcRouteHandler的类型. 一.MvcRoute