3

URL の末尾に不明な数のパラメーターを取る MVC ルートに取り組んでいます。このようなもの:

domain.com/category/keyword1/keyword2/.../keywordN

これらのキーワードは、一致する必要があるフィルターの値です。

これまでのところ、私が考えることができる唯一のアプローチは醜いです...必要になる可能性が高いよりも多くのパラメーターを持つ ActionResult を作成するだけです:

ActionResult CategoryPage(文字列 urlValue1、文字列 urlValue2、文字列 urlValue3 など...) { }

これはちょっと気分が悪いです。それらをクエリ文字列に詰め込むことができると思いますが、セクシーな MVC URL を失いますよね? 不明な数のオプション パラメータを処理するようにハンドラ メソッドを宣言するより良い方法はありますか?

ルートは Application Start で配線する必要がありますが、それほど難しくありません。キーワードの最大数はデータベースから簡単に判断できるので、大したことはありません。

ありがとう!

4

2 に答える 2

6

次のようなキャッチオール パラメーターを使用できます。

routes.MapRoute("Category", "category/{*keywords}", new { controller = "Category", action = "Search", keywords = "" });

次に、検索アクション メソッドに 1 つのパラメーターを設定します。

public ActionResult Search(string keywords)
{
    // Now you have to split the keywords parameter with '/' as delimiter.
}

以下は、keywords パラメーターの値を持つ可能な URL のリストです。

http://www.example.com/category (キーワード: "")
http://www.example.com/category/foo (キーワード: "foo")
http://www.example.com/category/foo /bar (キーワード: "foo/bar")
http://www.example.com/category/foo/bar/zap (キーワード: "foo/bar/zap")

于 2010-07-30T13:34:19.297 に答える
1

同じルート パラメータのキーワード部分を作成し、それらをダッシュ​​ (-) で連結できます。検索ルートは次のようになります

routes.MapRoute("Category", "category/{searchstring}", new { controller = "Category", action = "Search", searchstring = "" }, null));

URL を次のように構成します。

www.domain.com/category/cars-furniture-houses-apparel

コントローラーアクションで分割します。

膨大な数のパラメーターを絶対に避けてください。

于 2010-07-30T13:19:04.730 に答える