前面了解过了动作方法可以返回一个视图,其中出现了会去渲染非默认动作方法名为名称的视图,这种情况下,其实可以重定向到渲染该视图的动作方法上去,而不是由自己去渲染该视图。
说的有点繁琐,可以这样理解
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了。。。