重定向回来而不会丢失获取参数

时间:2015-01-14 11:49:52

标签: c# asp.net-mvc visual-studio

我写的是简单的MVC网页。我将被非常有限的用户使用,所以我不需要,我也不想关心许多标准事物。

我有一些控制器列出了一些实体。用户可以过滤它,可以转到其他页面。它都添加了get参数,即?site=3&id_gt=14。这是控制器的Index动作。

我使用POST处理该列表中的一些操作。例如,可能有行动Delete。控制器中Delete操作的内部代码处理请求,并且我将重定向回Index操作:

public class MyController : Controller
{
    public ActionResult Index(/* some parameters*/)
    {
        ...
    }

    [HttpPost]
    public ActionResult Delete(/* some model*/)
    {
        //deleting code
        return RedirectToAction("Index");
    }
}

它工作正常,但我从GET丢失了Index个参数。是否有任何简单的方法可以从Delete控制器返回......这会告诉浏览器它应该使用所有GET参数重新加载当前页面?

3 个答案:

答案 0 :(得分:1)

Chris Redhead是对的。您还可以使用TempData集合,该集合通过重定向保留数据,但在内部而不是在查询字符串中。它本质上使用了引擎盖下的会话,但它不会保留超过1个重定向的值。

答案 1 :(得分:1)

我用简单的方法解决了它:

return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri);

从请求中获取url并使用所有GET参数重定向回来。

答案 2 :(得分:0)

调用RedirectToAction()时,可以使用重载RedirectToAction( string actionName, Object routeValues )将参数作为routeValues添加到匿名对象中。

E.G。

    return RedirectToAction("Index", new{Parameter1 = (somevalue), Parameter2 = (somevalue)});