2011-05-23 168 views
2

我必須使用查詢字符串參數(如「familydrilldown.aspx?familyid = 61」)將一個漂亮的ASP.NET MVC URL'/ sel/F/61'映射到ASPX url 」。我嘗試添加這Global.asax中:使用查詢字符串將ASP.NET MVC URL路由到URL

routeTable.MapPageRoute(
       "selectorroute", 
       "sel/F/{familyid}", 
       "~/selector/familydrilldown.aspx"); 

其作品,除了FAMILYID不作爲查詢字符串來familydrilldown.aspx通過。

如何獲取{familyid}並將其作爲查詢字符串參數傳遞給頁面familydrilldown.aspx?

我嘗試這樣做:

routeTable.MapPageRoute(
       "selectorroute", 
       "sel/F/{familyid}", 
       "~/selector/familydrilldown.aspx?familyid={familyid}"); 

當然,這並不真正發揮作用的,但...

如何做到這一點任何想法?

謝謝!

+0

我遇到了完全相同的問題。如果你上面使用的語法真的起作用了,那肯定會很好!現在,我有很多代碼首先查詢查詢字符串,然後查找路由數據。如果我有一天感到無聊,也許我會研究Lud解決方案的通用版本。 – Jay 2011-11-21 15:03:45

回答

2

我發現通過實現我自己的IRouteHandler的解決方案:

public class SelectorRouteHandler<T> : IRouteHandler 
    where T : IHttpHandler, new() 
{          
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     string queryString = 
      "?familyid=" + requestContext.RouteData.Values["familyid"]; 

     HttpContext.Current.RewritePath(
      string.Concat("~/selector/familydrilldown.aspx", queryString)); 

     var page = BuildManager.CreateInstanceFromVirtualPath(
      "~/selector/familydrilldown.aspx", typeof(T)) as IHttpHandler; 

     return page;      
    } 
} 

,並對其進行註冊,如:

routeTable.Add(
    "selectorRoute", 
    new Route("sel/F/{familyid}", SelectorRouteHandler<Page>())); 
+0

+1,但只是一個註釋,你也可以在通過'requestContext.HttpContext'提供'HttpContext'對象。我想這兩個實現大致相同,但對我來說,使用'requestContext'對象更好。 – FishBasketGordo 2012-08-27 18:24:06

0

我不知道你想要什麼是可能的。 你爲什麼不使用?

var familyId = Page.RouteData.Values["familyid"] 
在Page_Load

(可能有一些鑄造參與)

+0

謝謝您的評論。 aspx頁面已經存在了,所以如果我們不需要改變它們會更好......當前它們使用Request.QueryString對象... – 2011-05-23 18:23:11