2013-04-08 77 views
0

我想知道如何保持一個在ASP.NET MVC-4UrlRedirect奇怪的重定向行爲

例如,我有這樣的:

/admin/category/add/81/142 

但我使用後:

return RedirectToAction("Add", "Category", new RouteValueDictionary 
{ 
    {"id", siteid.Value}, 
    {"cid", pid.HasValue ? pid.Value : cid.Value } 
}); 

我得到這個:

/admin/category/add?id=81&cid=142 

但我想原來的/admin/category/add/81/142

這裏是我的路由配置:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRouteLowercase(
      "Admin_LogOn", 
      "Admin/{controller}/{action}/", 
      defaults: new { controller = "Account", action = "LogOn" }, 
      constraints: null 
     ); 

     context.MapRouteLowercase(
      "Admin_Category_List_Add", 
      "Admin/{controller}/{action}/{id}/{cid}/{pid}", 
      defaults: 
       new 
       { 
        controller = "Category", 
        action = "Create", 
        id = UrlParameter.Optional, 
        cid = UrlParameter.Optional, 
        pid = UrlParameter.Optional 
       }, 
      constraints: null 
     ); 


     context.MapRouteLowercase(
      "Admin_TwoParameters", 
      "Admin/{controller}/{action}/{id}/{cid}", 
      defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional, cid = UrlParameter.Optional }, 
      constraints: null 
    ); 


     context.MapRouteLowercase(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional }, 
      constraints: null 
     ); 
    } 

回答

1
But i want the original one /admin/category/add/81/142 

要保留格式,你可以這樣做:

return Redirect(Url.Action("Add", "Category") + "/" + siteid.Value + "/" + (pid.HasValue ? pid.Value : cid.Value)); 

,或者如果你喜歡Concat的字符串(我更喜歡第一個):

return Redirect(new[] { Url.Action("Add", "Category"), "/", siteid.Value, "/", (pid.HasValue ? pid.Value : cid.Value).ToString()}); 
+0

請告訴我,我可以做更多的一般行爲,喜歡實現自定義路由還是什麼? – IamStalker 2013-04-08 09:42:26

+0

不使用自定義路由,您可以使用它將您想要的url格式映射到正確的控制器和方法。 Url.Action已經是一種「普遍行爲」,並且已經將'routevalues'傳遞給它。只有它真的會給你的鍵值對(例如ID = 81)。但是,與我的建議解決方案相比,這是最安全的 - 對於您的問題,這是一個相當好的答案。另一種方法 - 除了Url.Action提供的內容之外,您可以將(動態)對象傳遞給將爲您構建字符串的方法。 – 2013-04-08 09:55:33

+0

感謝您的建議,您的解決方案很好地工作。 – IamStalker 2013-04-08 12:03:31