傻瓜教你看清MVC內部執行流程之ViewData數據傳輸,輕松學MVC--①目了然篇(待續)

1.首先在執行到Controller里面的action(方法),執行到最后會調用一個View()-->此方法是Controller的一個方法

源代碼:

View Code
protected internal ViewResult View(){return View(null /* viewName */, null /* masterName */, null /* model */);}

?

?2.然后繼續調用自己的View(參數1,參數2,參數3)帶三個參數的view()???

? ??

View Code
 protected internal virtual ViewResult View(string viewName, string masterName, object model){if (model != null) {ViewData.Model = model;}return new ViewResult {ViewName = viewName,MasterName = masterName,ViewData = ViewData,TempData = TempData};}

?

?3.在上步View(string viewName, string masterName, object model)執行完畢將數據封裝到ViewResult(ActionResult的子類)中以后MVC會自己調用ViewResult的父類ViewResultBaseExecuteResult(),方法里面會封裝好viewContext對象,并調用IView接口的Render()方法

???

View Code
      public override void ExecuteResult(ControllerContext context){if (context == null) {throw new ArgumentNullException("context");}//其中會判斷View()是否有action名,沒有則會默認將"路由里面"的action賦值給ViewNameif (String.IsNullOrEmpty(ViewName)) {ViewName = context.RouteData.GetRequiredString("action");}ViewEngineResult result = null;if (View == null) {result = FindView(context);View = result.View;}TextWriter writer = context.HttpContext.Response.Output;//封裝數據到viewContext上下文中
ViewContext viewContext = new ViewContext(context, View, ViewData, TempData, writer);View.Render(viewContext, writer);//調用IView接口的Render()方法if (result != null) {result.ViewEngine.ReleaseView(context, View);}}

?未完待續...

?4.IView接口是由BuildManagerCompiledView類實現的,此類乃是一個抽象類,最終是有WebFormView類來繼承并重寫了RenderView方法,最終完成ViewData賦值給ViewPage類的ViewData字典屬性,最后完成輸出顯示

??

View Code
      public void Render(ViewContext viewContext, TextWriter writer) {if (viewContext == null) {throw new ArgumentNullException("viewContext");}object instance = null;Type type = BuildManager.GetCompiledType(ViewPath);if (type != null) {instance = _viewPageActivator.Create(_controllerContext, type);}if (instance == null) {throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,MvcResources.CshtmlView_ViewCouldNotBeCreated,ViewPath));}RenderView(viewContext, writer, instance);}protected abstract void RenderView(ViewContext viewContext, TextWriter writer, object instance);

?

? 5.WebFormView類來繼承并重寫了RenderView方法,最終完成ViewData賦值給ViewPage類的ViewData字典屬性,最后調用pr方法走完請求管道,頁面生命周期最終完成MVC的數據的呈現? ? ?

重寫父類的抽象方法
//重寫父類的抽象方法     protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance) 
      {ViewPage viewPage = instance as ViewPage;if (viewPage != null) {//
                RenderViewPage(viewContext, viewPage);return;}ViewUserControl viewUserControl = instance as ViewUserControl;if (viewUserControl != null) {RenderViewUserControl(viewContext, viewUserControl);return;}throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,MvcResources.WebFormViewEngine_WrongViewBase,ViewPath));}private void RenderViewPage(ViewContext context, ViewPage page){if (!String.IsNullOrEmpty(MasterPath)) {page.MasterLocation = MasterPath;}page.ViewData = context.ViewData;//調用ViewPage的RenderView方法,然后調用pr方法走完請求管道,頁面生命周期最終完成MVC的數據的呈現
            page.RenderView(context);}

?

轉載于:https://www.cnblogs.com/XiaoAi3/archive/2012/09/05/2672367.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377234.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《MySQL——count()邏輯》

count()用法 count()語義:該函數為一個聚合函數,對于返回的結果集一行行地判斷,如果count函數地參數不是NULL,累計值就加1,否則不加。最后返回累計值。 所以count(*),count(主鍵id)和count(1)都表示返回滿足條件地結果…

phpmailer 發送郵件

<?php /* 可用新浪和網易郵箱測試成功&#xff0c;但QQ不成功&#xff01; 下載 phpmailer 解壓 http://phpmailer.worxware.com/要注意郵件服務器的端口號&#xff0c;默認是 25 不用修改&#xff0c;如果不是則要修改如下&#xff0c;在$mail->IsSMTP() ;下一行加上 $…

靜態負載均衡和動態負載均衡_動態負載平衡

靜態負載均衡和動態負載均衡動態負載平衡 (Dynamic Load Balancing) The algorithm monitors changes on the system workload and redistributes the work accordingly. 該算法監視系統工作負載的變化并相應地重新分配工作。 This algorithm works on three strategies: 該算…

poj 1088

題目&#xff1a;http://poj.org/problem?id1088 記憶化搜索&#xff0c;dp[r][c] max(dp[r - 1][c] , dp[r 1][c] , dp[r][c - 1] , dp[r][c 1]) 1 ( if (題目給的條件滿足&#xff09;&#xff09; View Code 1 using namespace std;2 typedef long long ll;3 const in…

《MySQL——order by邏輯(全字段排序與rowid排序)》

創建一個表&#xff0c;然后使用查詢語句&#xff1a; 查詢城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前 1000 個人的姓名、年齡 create table t (id int(11) not null,city vachar(16) not null,name vachar(16) not null,age vachar(16) not null,addr va…

ruby 生成哈希值_哈希== Ruby中的運算符

ruby 生成哈希值In the last article, we have seen how we can compare two hash objects with the help of < operator? "<" method is a public instance method defined in Rubys library. 在上一篇文章中&#xff0c;我們看到了如何在<運算符的幫助下…

HTML5 video

摘要&#xff1a;本文主要介紹HTML5 video在android2.2中實現的主要架構和程序流程。 一、實現HTML5 video主要的類 1&#xff0e; 主要類結構及介紹 圖1中綠色類為java類&#xff0c;其余為c類&#xff0c;下面是各個類的具體介紹: (1) HTMLElement類不是最上層類&#xff0c…

《MySQL——使用聯合索引、覆蓋索引,避免臨時表的排序操作》

聯合索引避免臨時表排序 在上一篇筆記(MySQL——order by邏輯&#xff08;全字段排序與rowid排序&#xff09;)中&#xff0c;講到查詢語句查詢多個字段的時候使用order by語句實現返回值是有序的&#xff0c;而order by是使用到了臨時表的&#xff0c;會帶來時間和空間損失。…

明源面試

明源面試&#xff0c;筆試題目如下 一、SQL測試題 1 有兩張表 根據給出的SQL語句&#xff0c;寫出返回的行數分別是多少&#xff1f;為了形象直觀的顯示&#xff0c;我給出了sql語句執行結果。 A 學生表 B分數表 新題目 select a.* from a inner join b on a.idb.id; …

AEAP的完整形式是什么?

AEAP&#xff1a;盡早 (AEAP: As Early As Possible) AEAP is an abbreviation of "As Early As Possible". AEAP是“ April越早”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Faceboo…

jquery 視覺特效(鼠標懸停時依次顯示圖片)

效果描述&#xff1a; 有幾副圖片&#xff0c;讓他們依次疊加重合。首先顯示第一張圖片。然后鼠標懸停在上面&#xff0c;邊框變化。然后離開&#xff0c;然后第一張淡出&#xff0c;第二張淡入。接著懸停在第二張圖片&#xff0c;邊框變化&#xff0c;然后離開&#xff0c;第二…

《MySQL tips:查詢時,盡量不要對字段進行操作》

維護一個交易系統&#xff0c;交易記錄表tradelog包含交易流水號(tradeid)、交易員id(operator)、交易時間(t_modified)等字段。 建表語句如下&#xff1a; create table tradelog (id int(11) not null,tradeid varchar(32) default null,operator int(11) default null,t_mo…

cocos2dx blender 骨骼動畫實現

前言 cocos2d-x 中相關部分代碼介紹 背景知識介紹 參考 http://www.3dkingdoms.com/weekly/weekly.php?a4 一 簡單3d 模型支持 第一步實現對3d 模型的簡單支持&#xff0c;完成一個CCSprite3D 類 參考CCSprite 類 以及 CCGLProgram 代碼 主要修改 draw 方法。 添加了定點數組…

關于web.config中customErrors節點說明

關于web.config中<customErrors>節點說明 <customErrors>節點用于定義一些自定義錯誤信息的信息。此節點有Mode和defaultRedirect兩個屬性&#xff0c;其中defaultRedirect屬性是一個可選屬性&#xff0c;表示應用程序發生錯誤時重定向到的默認URL&#xff0c;如果…

肯德基收銀系統模式_肯德基的完整形式是什么?

肯德基收銀系統模式肯德基&#xff1a;肯塔基炸雞 (KFC: Kentucky Fried Chicken) KFC is an abbreviation of "Kentucky Fried Chicken". It is a fast-food restaurant chain whose specialty is known for fried chicken because of its specialization in it. It…

泛型(CSDN轉載)

函數的參數不同叫多態&#xff0c;函數的參數類型可以不確定嗎&#xff1f; 函數的返回值只能是一個嗎&#xff1f;函數的返回值可以不確定嗎&#xff1f; 泛型是一種特殊的類型&#xff0c;它把指定類型的工作推遲到客戶端代碼聲明并實例化類或方法的時候進行。 下面是兩個經典…

《MySQL tips:隱式類型轉換與隱式字符編碼轉換對查詢效率的影響》

維護一個交易系統&#xff0c;交易記錄表tradelog包含交易流水號(tradeid)、交易員id(operator)、交易時間(t_modified)等字段。 create table tradelog (id int(11) not null,tradeid varchar(32) default null,operator int(11) default null,t_modified datetime default n…

HDU4291 A Short problem

求通項和斐波那契數列的方法一樣&#xff0c;矩陣快速冪。 這道題麻煩在套了三層。 但其實取模這種操作肯定會出現循環的&#xff0c;可以先本地暴出循環節&#xff0c;1000000007對應的循環節是222222224&#xff0c;222222224對應的循環節是183120。 最外層的結果是對1000000…

pvr波形是什么意思_PVR的完整形式是什么?

pvr波形是什么意思PVR&#xff1a;Priya村路演 (PVR: Priya Village Roadshow) PVR is an abbreviation of Priya Village Roadshow. It is one of the biggest and leading multiplex cinema chains in India. PVR是Priya Village Roadshow的縮寫 。 它是印度最大和領先的多元…

《MySQL——查詢長時間不返回的三種原因與查詢慢的原因》

目錄查詢長時間不返回等MDL鎖等flush等行鎖查詢慢構造一張表&#xff0c;表有兩個字段id和c&#xff0c;再里面插入了10萬行記錄 create table t (id int(11) not null,c int(11) default null,primary key (id) ) engine InnoDB;delimiter ;; create procedure idata() begi…