前面了解过了动作方法可以返回一个视图,其中出现了会去渲染非默认动作方法名为名称的视图,这种情况下,其实可以重定向到渲染该视图的动作方法上去,而不是由自己去渲染该视图。
说的有点繁琐,可以这样理解
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呢,不占用多少内存,又可以跨请求传递数据,又可以自动清除内存~~~
使用方法如下
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了。。。