在不丢失get参数的情况下重定向回来

Redirect back without losing get parameters

我正在编写简单的 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");
    }
}

它工作正常,但我丢失了 IndexGET 个参数。有什么简单的方法可以从 Delete 控制器 return 告诉浏览器它应该使用所有 GET 参数重新加载当前页面?

调用 RedirectToAction() 时,您可以使用重载 RedirectToAction( 字符串动作名称, 对象路由值 ) 将您的参数添加为匿名对象中的路由值。

例如

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

Chris Redhead 是正确的。您还可以使用 TempData 集合,它通过重定向但在内部而不是在查询字符串中保留数据。它本质上在幕后使用会话,但它不会为超过 1 个重定向保留值。

我已经用简单的方法解决了:

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

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