首页 > 代码库 > MVC控制器执行重定向

MVC控制器执行重定向

  前面了解过了动作方法可以返回一个视图,其中出现了会去渲染非默认动作方法名为名称的视图,这种情况下,其实可以重定向到渲染该视图的动作方法上去,而不是由自己去渲染该视图。

说的有点繁琐,可以这样理解

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了。。。