[英]ASP.NET MVC - Pass current GET params with RedirectToAction
我正在寻找一种在传递当前请求的 GET 参数时使用 RedirectToAction 的方法。
所以在去: http://mydomain.com/MyController/MyRedirectAction?somevalue=1234
然后,我想通过重定向重定向并保留 somevalue,而无需显式构建路由字典并显式设置 somevalue
public ActionResult MyRedirectAction()
{
if (SomeCondition)
RedirectToAction("MyAction", "Home");
}
如果可用,重定向的操作可以使用 somevalue:
public ActionResult MyAction()
{
string someValue = Request.QueryString["somevalue"];
}
有没有一种干净的方法可以做到这一点?
如果您使用RedirectToRoute
传递参数,它们将在 URL 中显示为查询字符串。
我不是 ASP .NET MVC 框架方面的专家,但实现此目的的一种方法是将您的数据放入 TempData 字典中。
TempData["your key"] = someData;
您要重定向到的操作应该知道检查此数据,当然还要处理它不存在的情况。 这些数据不会超出重定向的范围——它只对一个请求有用。
如果您不喜欢为您的键使用字符串文字,您可以为您的 TempData 键创建常量。
自定义操作结果可以完成这项工作:
public class MyRedirectResult : ActionResult
{
private readonly string _actionName;
private readonly string _controllerName;
private readonly RouteValueDictionary _routeValues;
public MyRedirectResult(string actionName, string controllerName, RouteValueDictionary routeValues)
{
_actionName = actionName;
_controllerName = controllerName;
_routeValues = routeValues;
}
public override void ExecuteResult(ControllerContext context)
{
var requestUrl = context.HttpContext.Request.Url;
var url = UrlHelper.GenerateUrl(
"",
_actionName,
_controllerName,
requestUrl.Scheme,
requestUrl.Host,
null,
_routeValues,
RouteTable.Routes,
context.RequestContext,
false
);
var builder = new UriBuilder(url);
builder.Query = HttpUtility.ParseQueryString(requestUrl.Query).ToString();
context.HttpContext.Response.Redirect(builder.ToString(), false);
}
}
接着:
public ActionResult MyRedirectAction()
{
return new MyRedirectResult("MyAction", "Home", null);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.