結論: ViewData 適用於 在一次請求中 傳遞數據 . 好比咱們從 主Action 到 主視圖, 而後在 主視圖中 用 RenderAction 請求子Action的時候,就是算做 一次請求.html
場景,咱們在 主頁面中,有一個 login登錄模塊, 咱們判斷,若是 用戶是登錄的,那麼就顯示 帳號密碼, 若是用戶沒有登錄, 則顯示 登錄框mvc
先來看看 咱們的代碼先運行 /home/index 這個Action 而後到了前臺以後, 前臺的CShtml中 直接使用 Html.RendyAction 來調用子視圖.佈局
咱們先來試試 ViewBag 可否傳遞值給 子Action中呢? post
前臺生成htm
那咱們如今來試試 TempData 來傳遞數據試試blog
最後生成的html代碼排序
注意,這裏返回 視圖(Return View) 和 返回 分部視圖 ( Return PartialView)的區別是什麼呢? get
直白一點就是, 完整視圖 Return View 會先去執行 ViewStart.cshtml , 若是ViewStart.cshtml中有指定Layout屬性,那麼還會執行這個Layout的頁面it
若是是返回 分部視圖 Return PartialView ,則不執行 ViewStart.cshtml ,直接運行分部視圖.io
舉一個例子 : 假如咱們請求的頁面是 /Product/Index的時候 , 若是在根目下的ViewStart.cshtml中有一段代碼,而且在Product文件夾下的ViewStart也有代碼,那麼到最後的目標視圖 index中也有代碼,這3種代碼是如何排序的?
答案是,依次進行 好比 根Viewstart中有的代碼,會排在 Product下的viewstart的前面,而後把這2者的代碼,又會帶到 目標Index視圖的前面,最後,把這3者的代碼,回填到ViewStart中指定的 layout.cshtml (默認視圖) 裏面的 RendyBody處 (若是在目標index中,有section節點,那麼Section節點會回填到 layout.cshtml中的 RenderSection 處)
具體的也能夠看看這篇文章 EF5+MVC4系列(10) mvc的佈局頁面 _ViewStart.Cshtml
二 : Tempdata的高級用法,註冊或者填寫表單的時候,將註冊的資料不清空,從新返回給前臺頁面顯示註冊資料
場景:咱們有時候在註冊的時候,或者是其餘填寫表單的時候,若是經過了前臺驗證,可是後臺驗證不過,這個時候,爲了更用戶一個良好的用戶體驗,能夠將用戶填寫數據,再次返回給前臺頁面上顯示出來,這樣,用戶只須要修改部分信息就能夠了,不用所有從新輸入一次
我發現這個沒有什麼用…直接return view的時候,把 post提交的 model 當作 view的返回值 model 就能夠直接傳給前臺了
前臺只要設置了 @model Joey.Model.Play 設置了當前頁面的Model屬性,就能夠直接拿上次你提交的不成功的數據了
三: Tempdata 應用例子,經過Tempdata 實現添加數據時防止頁面刷新出現重複提交數據的狀況:
參考 http://www.cnblogs.com/zgqys1980/archive/2012/08/16/2641922.html