2016-02-05 1 views
0

J'ai une application WebForms et je pensais à utiliser le routage pour les URL plus conviviales. Cependant, pendant mon bricolage, j'ai découvert que les paramètres de chaîne de requête qui font partie d'une route ne sont plus disponibles via Request.QueryString (ce qui est logique). Idéalement, j'aimerais pouvoir toujours avoir ces valeurs disponibles à partir de la collection QueryString afin de ne pas avoir à mettre à jour les centaines de pages en utilisant les valeurs de chaîne de requête pour utiliser les valeurs de données de route à la place. Par exemple, donc je ne dois pas remplacer:Routage, chaîne de requête et URL WebForms existantes

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

avec ceci:

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

Je pensais à l'aide Réécriture d'URL à la place mais je finirais aime prendre avantage des routes nommées pour la redirection et les hyperliens.

Existe-t-il un moyen d'utiliser le routage sans mettre à jour chaque page pour utiliser la collection RouteData au lieu de la collection QueryString?

Répondre

1

dans global.asax

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

dans Products.aspx

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

dans productsdetails.aspx.cs

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

      } 
} 

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

C'est propre classe

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

Merci, je suis conscient de la façon d'enregistrer un itinéraire, etc. J'essaie d'éviter tout le travail fastidieux consistant à remplacer l'utilisation de la collection QueryString par l'utilisation de la collection RouteData. –