2011-06-01 89 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鍵創建常量。

相關問題