zoukankan      html  css  js  c++  java
  • 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呢,不占用多少内存,又可以跨请求传递数据,又可以自动清除内存~~~

    使用方法如下

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

  • 相关阅读:
    请问“javascript:;”是什么意思?
    C++怎么读入非文本文件中的内容
    java 判断数据类型和方法
    Microsoft windows terminal
    webstorm tools window
    What does the dot after dollar sign mean in jQuery when declaring variables?
    File upload with cropping support using Cropper --jquery file upload
    What is httpcontext
    foreach on Request.Files
    jQuery file upload测试
  • 原文地址:https://www.cnblogs.com/Terry-Li/p/3784273.html
Copyright © 2011-2022 走看看