繁体   English   中英

ASP.NET MVC - 使用 RedirectToAction 传递当前 GET 参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM