0

我有一个 WebForms 应用程序,并且正在考虑使用路由来获得更友好的 URL。但是,在我修修补补的过程中,我发现作为路由一部分的查询字符串参数不再可以通过 Request.QueryString 获得(这是有道理的)。理想情况下,我希望仍然能够从 QueryString 集合中获得这些值,因此我不必使用查询字符串值更新数百个页面来使用路由数据值。例如,所以我不必替换它:

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

有了这个:

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

我正在考虑改用 URL Rewrite,但我最终想利用命名路由进行重定向和超链接。

有没有办法使用路由而不更新每个页面以使用 RouteData 集合而不是 QueryString 集合?

4

1 回答 1

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;
        }
    }
于 2016-02-05T12:53:42.473 回答