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

一線碼農發表於2015-03-15

   平時我們在Action中編碼的時候,我們都知道所有的Action返回值型別都是ActionResult,並且我們的返回值也是各種奇葩,比如:Json(),Content(),

View()等等。。。當你寫這個程式碼的時候,你是不是有一種強烈的偷窺欲。。。那這篇我們就一起來看一看。

一:例項程式碼

 1     public class HomeController : Controller
 2     {
 3         public ActionResult Index()
 4         {
 5             ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
 6 
 7             return View();
 8         }
 9 
10         public ActionResult About()
11         {
12             ViewBag.Message = "Your app description page.";
13 
14             return Json("");
15         }
16 
17         public ActionResult Contact()
18         {
19             ViewBag.Message = "Your contact page.";
20 
21             return Content("");
22         }
23     }

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了。。。

相關文章