在不丢失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");
}
}
它工作正常,但我丢失了 Index
的 GET
个参数。有什么简单的方法可以从 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
参数重定向回它。
我正在编写简单的 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");
}
}
它工作正常,但我丢失了 Index
的 GET
个参数。有什么简单的方法可以从 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
参数重定向回它。