0

ツリーナビゲーションシステムの構造に従うルートを作成しようとしています。つまり、ルートにツリー内のパス全体を含めたいと考えています。だから私がこのような木を持っていたら

  • コンピューター
    • ソフトウェア
      • 発達
      • グラフィックス
    • ハードウェア
      • CPU
      • グラフィックカード

それならこんなルートにしたいと思います

  • site.com/catalog/computers/software/graphics

これは、それ自体は難しくなく、このようなルートで捕まえることができます

  • カタログ/{*カテゴリ}

ただし、そのURLの最後に製品情報を追加できるようにしたいのですが、次のようになります。

  • site.com/catalog/computers/software/graphics/title=Photoshop

これは、次の例のように定義されたルートを再利用することを意味します

  • site.com/{*categories}/title={name}
  • site.com/{*categories}

ただし、これらのルートの最初のルートは無効です。{* category}などの貪欲なパラメーターの後に他に何も表示されないため、少し行き詰まっています。正規表現ルートを実装するか、IRouteContraintを使用してこれを回避することを考えていましたが、Html.ActionLink(...)メソッドを使用してアウトバウントURLを生成できる適切なソリューションは考えられません。 {*categories}と{name}の両方に入力しました

どんなアドバイスも大歓迎です!

昨日私が同じような質問を見たことがあるかもしれませんが、それ以降はもっと考えて、古い質問には私の問題の不完全な説明が含まれていたため、削除されました。

UPDATE2008/11/26ソリューションをhttp://thecodejunkie.blogspot.com/2008/11/supporting-complex-route-patterns-with.htmlに投稿しました

4

2 に答える 2

4

URL 内の貪欲なセグメント

GreedyRouteURL の任意の場所に貪欲な (すべてをキャッチする) セグメントをサポートするクラスを作成しました。あなたがそれを必要としてからしばらく経ちましたが、将来他の人に役立つかもしれません.

次のパターンのいずれかをサポートします。

  • {segment}/{segment}/{*greedy}Route- これは、デフォルトクラスですでにサポートされています
  • {segment}/{*greedy}/{segment}-途中で貪欲
  • {*greedy}/{segment}/{segment}-最初は貪欲

私のブログ投稿ですべての詳細を読んで、コードを取得することもできます。

于 2011-03-15T08:04:59.000 に答える
3

ルートはクエリ文字列パラメーターを無視します。ただし同時に、同じ名前のルート URL パラメーターがない限り、クエリ文字列パラメーターがアクション メソッドに渡されます。したがって、2 番目のルートだけを使用し、クエリ文字列を介してタイトルを渡します。

別のオプションはより複雑です。Route から派生するカスタム ルートを記述し、GetRouteData メソッドをオーバーライドして、「カテゴリ」の値 (RouteData.Values["categories"] など) を解析し、解析したデータをルート値ディクショナリ (RouteData.Values など) に追加します。 ["タイトル"] = parsedTitle.

于 2008-11-19T08:45:41.553 に答える