2011-06-01 91 views
1

我正在寻找一种在传递当前请求的GET参数时使用RedirectToAction的方法。ASP.NET MVC - 通过RedirectToAction传递当前GET参数

所以在打算: http://mydomain.com/MyController/MyRedirectAction?somevalue=1234

话,我会想重定向并与重定向坚持someValue中,而无需显式地构建一个路由字典,并明确设置someValue中

public ActionResult MyRedirectAction() 
{ 
    if (SomeCondition) 
     RedirectToAction("MyAction", "Home"); 
} 

重定向动作然后可以使用一些价值如果可用:

public ActionResult MyAction() 
{ 
    string someValue = Request.QueryString["somevalue"]; 
} 

是否有一个干净的方式来做到这一点S'

回答

2

自定义操作的结果可以做的工作:

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); 
} 
2

如果您通过参数,使用RedirectToRoute,它们将作为查询字符串出现在URL中。

我不是ASP .NET MVC框架的专家,但实现此目的的一种方法是将数据放入TempData字典中。

TempData["your key"] = someData; 

您正在重定向的操作应该知道检查这些数据,当然还要处理它不存在的情况。这些数据不会超出重定向的范围 - 它只适用于一个请求。

如果您不喜欢使用字符串文字作为您的键,则可以为您的TempData键创建常量。

相关问题