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


結論: ViewData 適用於 在一次請求中 傳遞數據  . 比如我們從 主Action 到 主視圖, 然后在 主視圖中  用 RenderAction 請求子Action的時候,就是算作 一次請求.

場景,我們在 主頁面中,有一個  login登陸模塊,  我們判斷,如果 用戶是登陸的,那么就顯示 賬號密碼,  如果用戶沒有登陸, 則顯示 登陸框

先來看看 我們的代碼先運行  /home/index  這個Action 然后到了前台之后, 前台的CShtml中 直接使用 Html.RendyAction 來調用子視圖.

image

 

我們先來試試 ViewBag 能否傳遞值給 子Action中呢? 

image

image

前台生成

image

 

那我們現在來試試 TempData 來傳遞數據試試

image

image

最后生成的html代碼

image

注意,這里返回 視圖(Return View) 和 返回 分部視圖 ( Return PartialView)的區別是什么呢

直白一點就是, 完整視圖 Return View 會先去執行 ViewStart.cshtml , 如果ViewStart.cshtml中有指定Layout屬性,那么還會執行這個Layout的頁面

如果是返回 分部視圖   Return PartialView  ,則不執行 ViewStart.cshtml ,直接運行分部視圖.

舉一個例子 : 假如我們請求的頁面是  /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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM