EF5+MVC4系列(12) 在主視圖中直接用RenderAction調用子Action,並返回視圖(Return View)或者分部視圖(Return PartialView); 從主Action傳

結論: ViewData 適用於 在一次請求中 傳遞數據  . 好比咱們從 主Action 到 主視圖, 而後在 主視圖中  用 RenderAction 請求子Action的時候,就是算做 一次請求.html

場景,咱們在 主頁面中,有一個  login登錄模塊,  咱們判斷,若是 用戶是登錄的,那麼就顯示 帳號密碼,  若是用戶沒有登錄, 則顯示 登錄框mvc

先來看看 咱們的代碼先運行  /home/index  這個Action 而後到了前臺以後, 前臺的CShtml中 直接使用 Html.RendyAction 來調用子視圖.佈局

image

 

咱們先來試試 ViewBag 可否傳遞值給 子Action中呢?  post

image

image

前臺生成htm

image

 

那咱們如今來試試 TempData 來傳遞數據試試blog

image

image

最後生成的html代碼排序

image

注意,這裏返回 視圖(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 就能夠直接傳給前臺了

image

前臺只要設置了 @model  Joey.Model.Play 設置了當前頁面的Model屬性,就能夠直接拿上次你提交的不成功的數據了

image

三: Tempdata 應用例子,經過Tempdata  實現添加數據時防止頁面刷新出現重複提交數據的狀況:

參考 http://www.cnblogs.com/zgqys1980/archive/2012/08/16/2641922.html

相關文章
相關標籤/搜索