標籤:style class blog code java http
前面瞭解過了動作方法可以返回一個視圖,其中出現了會去渲染非預設動作方法名為名稱的視圖,這種情況下,其實可以重新導向到渲染該視圖的動作方法上去,而不是由自己去渲染該視圖。
說的有點繁瑣,可以這樣理解
return View("Nice");//可以使用==>return RedirectToAction("Nice");或者return View("Nice","Good");==>return RedirectToAction("Nice","Good");結果都是一樣的,除非Nice的Action中有一些需要傳遞給Nice視圖的資料
對於這個重新導向,我本人目前還是有些不是很理解“臨時重新導向”和“永久重新導向”RedirectToActionPermanent
不得不說MVC的控制器輔助方法真的很多,一個重新導向居然又分為
1.RedirectToRoute//定向到路由系統的URL
2.RedirectToAction//定向到動作方法
其實這兩個輔助方法做的都是同樣的事,都是將當前的路由重新導向到另一個動作方法,然後去渲染一個視圖返回給使用者。
不過現在問題出來了,如果是重新導向了的話,瀏覽器是會遞交一個全新的Http請求的,這意味著我們是去了對原先請求細節的方法,意思就是我們不能訪問這個動作方法中的資料了,假如我們就是想要儲存重新導向之前
動作方法中的資料該怎麼辦,那麼我們可以使用TempData特性,該特性灰常神奇,不像一個全域變數一樣,應用程式關閉才會被釋放,它是當第一次被使用讀取以後,就會被標記刪除,然後在請求被處理完成以後正式被刪除,是不是很Nice呢,不佔用多少記憶體,又可以跨請求傳遞資料,又可以自動清除記憶體~~~
使用方法如下
?
| 1 2 3 4 5 6 7 8 9 10 |
public RedirectToRouteResult Index(){ TempDate["Nice"] = "Terry"; TempData["Reason"] = "中獎啦"; return RedirectToAction("Nice"); } public ViewResult Nice(){ Nice nice = new Nice{Name=TempData["Nice"],Reason=TempData["Reason"]}; return View(nice); } |
如果你還不死心,想要這個跨域傳遞的資料再保留多一會,可以使用
TempData.Keep("Nice");
這樣你的nice資料就可以再保留一次,下次讀取完畢,請求完成還是會被刪除的,如果你仍舊不想被刪除,那我只能推薦你使用session了。。。