2016-02-05 43 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集合使用的所有烦琐的工作。 –