2016-02-05 42 views
0

我有一個WebForms應用程序,並且正在考慮使用路由獲取更友好的URL。然而,在我修補程序期間,我發現作爲路由一部分的查詢字符串參數不再可以通過Request.QueryString獲得(這是有道理的)。理想情況下,我希望仍然能夠從QueryString集合中獲得這些值,因此我不必使用查詢字符串值更新數百個頁面,而是使用路徑數據值。例如,所以我不必更換此:路由,查詢字符串和現有的WebForms URL

var foo = Request.QueryString["foo"];

與此:

var foo = RouteData.Values["foo"];

我在考慮使用URL重寫來代替,但我最終還是想借用於重定向和超鏈接的命名路線的優勢。

有沒有辦法使用路由而不更新每一個頁面使用RouteData集合而不是QueryString集合?

回答

1
在global.asax中

void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute("Products","Products/{id}/{productname}", 
          "~/productdetails.aspx"); 
} 

在products.aspx

<ahref='<%#string.Format("/Products/{0}/{1}",Eval("id"),Clean.CleanUrl(Eval("ProductName").ToString())) %>'><%# Eval("ProductName") %></a> 

在productsdetails.aspx.cs

if (!IsPostBack) 
     { 
      if (RouteData.Values["id"] != null) 
      { 
       loadproduct(); 

      } 
} 

void loadproduct() 
{ 
select ............. where id= RouteData.Values["id"].ToString(); 
} 

這是清潔級

public static class Clean 
    { 
     public static string CleanURL(this string kelime) 
     { 
      if (kelime == "" || kelime == null) { return ""; } 
      kelime = kelime.Replace("ş", "s"); 
      kelime = kelime.Replace("Ş", "S"); 
      kelime = kelime.Replace(".", ""); 
      kelime = kelime.Replace(":", ""); 
      kelime = kelime.Replace(";", ""); 
      kelime = kelime.Replace(",", ""); 
      kelime = kelime.Replace(" ", "-"); 
      kelime = kelime.Replace("!", ""); 
      kelime = kelime.Replace("(", ""); 
      kelime = kelime.Replace(")", ""); 
      kelime = kelime.Replace("'", ""); 
      kelime = kelime.Replace("ğ", "g"); 
      kelime = kelime.Replace("Ğ", "G"); 
      kelime = kelime.Replace("ı", "i"); 
      kelime = kelime.Replace("I", "i"); 
      kelime = kelime.Replace("ç", "c"); 
      kelime = kelime.Replace("ç", "C"); 
      kelime = kelime.Replace("ö", "o"); 
      kelime = kelime.Replace("Ö", "O"); 
      kelime = kelime.Replace("ü", "u"); 
      kelime = kelime.Replace("Ü", "U"); 
      kelime = kelime.Replace("`", ""); 
      kelime = kelime.Replace("=", ""); 
      kelime = kelime.Replace("&", ""); 
      kelime = kelime.Replace("%", ""); 
      kelime = kelime.Replace("#", ""); 
      kelime = kelime.Replace("<", ""); 
      kelime = kelime.Replace(">", ""); 
      kelime = kelime.Replace("*", ""); 
      kelime = kelime.Replace("?", ""); 
      kelime = kelime.Replace("+", "-"); 
      kelime = kelime.Replace("\"", "-"); 
      kelime = kelime.Replace("»", "-"); 
      kelime = kelime.Replace("|", "-"); 
      kelime = kelime.Replace("^", ""); 
      return kelime; 
     } 
    } 
+0

謝謝,我知道如何註冊路由等。我試圖避免使用RouteData集合使用替換QueryString集合使用的所有煩瑣的工作。 –