2012-04-09 103 views
2

我正在使用MapPageRoute(ASP.NET 4)在多語言網站中支持友好的網址。MapPageRoute URL中的其他參數

我希望能夠傳遞額外的參數以及在MapPageRoute中定義的參數。

在上面的示例中,我需要根據以下URL確定請求的語言: (如果是「附件」,頁面應該是英文的,如果是「附件」 - 頁面應該是法文的):

routes.MapPageRoute(
      "Accessory fr", 
      "Accessoires/{accessory_name}", 
      "~/Accessory.aspx?lang=fr" 
     ); 

    routes.MapPageRoute(
     "Accessory en", 
     "Accessories/{accessory_name}", 
     "~/Accessory.aspx?lang=en" 
    ); 

因此,與請求的附件名稱沒有問題,它是通過使用Page.RouteData.Values["accessory_name"]閱讀,但我怎麼能讀lang參數?

我不能使用Request["lang"],因爲它不給我所要求的結果。 不知何故,?lang=xx不採取。

任何其他的想法,我怎麼能傳遞額外的參數,假設這個參數沒有明確地在URL中找到?

回答

5

如果你想要的是將其他參數傳遞到你的路由處理(頁),您可以設置DataTokens屬性,

Route reportRoute = new Route("Accessoires/{accessory_name}", new PageRouteHandler("~/Accessory.aspx")); 
reportRoute.DataTokens = new RouteValueDictionary { { "lang", "en" } }; 
routes.Add(reportRoute); 

你可以在你的處理器(頁)訪問此,

string lang = (string)Page.RouteData.DataTokens["lang"]; 

Check msdn, Route.DataTokens Property