检测是否从RedirectToAction()方法重定向了Page

Nee*_*ers 2 asp.net-mvc redirect

这是我的ActionResult方法:

    [HttpGet]
    public ActionResult Index(string cityID, string numbers, int days, bool onlySpecial)
    {
        LastTwoParameters lastTwoParameters = new LastTwoParameters();
        lastTwoParameters.listCities = Common.GetDropDownCitiesList();
        lastTwoParameters.listLastTwoResult = new List<getReport_LastTwo_Result>();

        // if IsPostBack , then execute

        if (!string.IsNullOrEmpty(cityID) && days > 0)
        {
            using (KQXS context = new KQXS())
            {
                lastTwoParameters.listLastTwoResult = context.getReport_LastTwo(cityID, numbers, days, onlySpecial).ToList();
            }
        }


        return View(lastTwoParameters);
    }

    [HttpPost]//Run action method on form submission
    public ActionResult Index(List<Cities> listCities, string cityID, string numbers, int days, bool onlySpecial)
    {
        return RedirectToAction("Index", "LastTwo", new{cityID = cityID, numbers = numbers, days = days, onlySpecial = onlySpecial});
    }
Run Code Online (Sandbox Code Playgroud)

我需要的是检测是否从RedirectToAction方法调用页面.因为我没有必要在用户第一次打开页面时计算结果.

小智 6

有两种方法可以解决您的问题.

  1. 您可以使用服务端缓存.Controller具有TempData属性.只需设置为TempData ["wasRedirected"] = true即可.并且在您第一次从框架中读取后将清除该值.在您的情况下,TempData ["wasRedirected"] == null表示您的代码未被重定向.

  2. 您可以使用url params,例如您的操作:

    public ActionResult Index(bool? wasRedirected)
    {
        return View();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在重定向方法中,您将拥有如下代码:

    [HttpPost]
    public ActionResult Redirect()
    {
        return this.RedirectToAction("Index", new { wasRedirected = true });
    }
    
    Run Code Online (Sandbox Code Playgroud)


Sim*_*her 5

在一个ActionFilter或通过覆盖OnAction{Executing, Executed}控制器上,您可以检查ActionResult类的类型.

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is RedirectResult) 
        {
            //do stuff
        }

        base.OnActionExecuted(filterContext);
    }
Run Code Online (Sandbox Code Playgroud)