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

   平時咱們在Action中編碼的時候,咱們都知道全部的Action返回值類型都是ActionResult,而且咱們的返回值也是各類奇葩,好比:Json(),Content(),javascript

View()等等。。。當你寫這個代碼的時候,你是否是有一種強烈的偷窺欲。。。那這篇咱們就一塊兒來看一看。前端

一:實例代碼java

 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()json

  仍是老規矩,咱們用ILSpy來看看它的源碼會是怎樣。。。app

 

從上面的圖中,咱們大概能夠看到,其實咱們在Action中作View()的時候,其實內部僅僅是作了一個new ViewResult的操做,而後代碼繼續會從this

ViewEngineCollection這個集合中去尋找我須要的View,那就有人疑問了,ViewEngineCollection這個集合怎麼填充的,其實我也不知道。。。編碼

但咱們能夠看到,若是在Collection中能找到View的話,會返回一個viewEngineResult回去,若是沒有找到則經過SearchedLocations將尋找路spa

徑所有打印出來。。。就像下面這樣,是否是頗有意思?3d

2.Json()code

   在當前富客戶端的大背景下,幾乎沒有程序不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了。。。

相關文章
相關標籤/搜索