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

时间:2014-11-05 06:36:55

标签: 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});
    }

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

2 个答案:

答案 0 :(得分:6)

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

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

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

    public ActionResult Index(bool? wasRedirected)
    {
        return View();
    }
    

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

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

答案 1 :(得分:5)

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

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

        base.OnActionExecuted(filterContext);
    }