1

IntelligenciaのUrlRewriterからASP.NET4.0の新しいWebフォームルーティングに切り替えました。基本的なページではうまく機能していますが、eコマースサイトでは、カテゴリページを参照するときに、以前はページングを制御するためにページャーコントロールに組み込まれたクエリ文字列を使用していましたが、ルーティングを使用してこれを処理する方法がわかりません。

MapPageRouteを次のように定義しました。

routes.MapPageRoute("cat-browse", "Category/{name}_{id}", ~/CategoryPage.aspx");

これはうまくいきます。今、誰かがクリックしてページ2に移動します。以前は、URLに?page=2を追加していました。Webフォームルーティングを使用してこれを処理するにはどうすればよいですか?私は次のようなことができることを知っています:

http://www.mysite.com/Category/Arts-and-Crafts_17/page/2

しかし、ページに加えて、フィルター、年齢範囲、性別などを含めることができます。

  1. 上記のようにこれらの変数を処理するルートを定義し続ける必要がありますか?
  2. クエリ文字列を引き続き使用する必要があります。使用する場合、それを処理するためのルートをどのように定義しますか?
4

2 に答える 2

4

URL ルーティングを使用する主な理由は、クリーンでユーザーと SEO に適した URL を公開することです。これが目標である場合は、それに固執し、クエリ文字列パラメーターを使用しないようにしてください。注: クエリ文字列の使用を完全に禁止する必要はないと思います。状況によっては、頻繁に使用されないパラメータや、意味的に意味のある情報。

だからここに私がすることがあります:

他のすべてのパラメーターのキャッチオールを定義します。

routes.MapPageRoute("cat-browse", "Category/{name}_{id}/{*queryvalues}", "~/CategoryPage.aspx"); 

/CategoryPage.aspx で、ルーター パラメーターにアクセスし、必要に応じて解析します。

Page.RouteData.Values["queryvalues"]

Arts-and-Crafts_17/**page/2/age/34**これらのパラメーターの構文を使用する代わりに、次の構文を使用することをお勧めします。Arts-and-Crafts_17/pg-2/age-34/

これを行うと、キャッチオール パラメーター 'querystring' は pg-2/age-34 と等しくなります。このデータを簡単に解析し、各名前/値をページ コンテキストに追加できるようになりました。これらの各パラメーターはサイトではオプションであるため、これらの行に沿って何かを行う必要があることに注意してください。

于 2010-04-28T06:44:30.253 に答える
-1

C# 4.0 の名前付きパラメーターとオプション パラメーターを利用できます。Haackedのこの例を見てください。

フレームワークの下位バージョンを使用している場合は、上記のリンクからコードを使用することもできます。しかし、メソッドを次のように宣言する代わりに

public ActionResult Search(int? page=0)
{}

次のように宣言できます

public ActionResult Search(int? page)
{
   if(page == null)
   {
     page=0;
   }
}

HTH

于 2010-04-27T13:00:45.203 に答える