私は、Erik Reitan によるASP.NET 4.5 WebForms の URL ルーティングに関するこのチュートリアルに従いました。URL ルーティングの利点は、その投稿で明らかにされています。
私が見ている欠点の 1 つは、データベースにクエリを実行する方法ごとに新しいクエリを作成する必要があることです。
たとえば、製品 ID による検索を実装するには、次のことを行う必要があります。
標準メカニズムを使用すると、リンクは次のようになります。
<a href="ProductDetail.aspx?productID=<%#:Item.ProductID%>">
URL ルーティングの実装
アプリ起動時にルートを登録する
void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute( "ProductByNameRoute", "Product/{productName}", "~/ProductDetails.aspx" ); }
ProductList.aspx マークアップを変更します。
<a href="<%#: GetRouteUrl("ProductByNameRoute", new {productName = Item.ProductName}) %>" <%#:Item.ProductName%> </a>
コード ビハインド (ProductList.aspx.cs) を変更します。
public IQueryable<Product> GetProduct( [QueryString("ProductID")] int? productId, [RouteData] string productName) { var _db = new WingtipToys.Models.ProductContext(); IQueryable<Product> query = _db.Products; if (productId.HasValue && productId > 0) { query = query.Where(p => p.ProductID == productId); } else if (!String.IsNullOrEmpty(productName)) { query = query.Where(p => String.Compare(p.ProductName, productName) == 0); } else { query = null; } return query; }
でクエリしたい場合はProductName
、新しいクエリを作成する必要があります。
製品をクエリする方法ごとに新しいクエリを作成する必要があるという問題を回避するにはどうすればよいですか?