0

asp.net mvc プロジェクトで次のルートが定義されています

//Products/Category/SubCategory/Page 
routes.MapRoute(
    "ProductCategoryTypePaging", 
    "Products/{Category}/{subCategory}/Page{page}", 
    new { controller = "Products", action = "Index" }, new { page = @"\d+" }
);

//Products/Category/Page 
routes.MapRoute(
    "ProductCategoryPaging", 
    "Products/{Category}/Page{page}", 
    new { controller = "Products", action = "Index" }, new { page = @"\d+" }
);

//Products/Category/SubCategory 
routes.MapRoute(
    "ProductCategoryType", 
    "Products/{Category}/{subCategory}", 
    new { controller = "Products", action = "Index", page = 1 }
);

//Products/Category 
routes.MapRoute(
    "ProductCategory", 
    "Products/{Category}", 
    new { controller = "Products", action = "Index" }
);


routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

これらは正常に動作しているように見えますが、製品の詳細を表示しようとすると、機能しなくなります。詳細を表示するには、URL は次のようになります。

/製品/詳細/18

Products/Category/SubCategory ルートで一致するランニング

これを機能させるには、どうすればよいですか?

4

1 に答える 1

0

これを行うにはいくつかの方法があります。

  1. Products/Category/SubCategory ルートを次のテンプレート (または同様の固有のもの) に変更するなど、ルートの静的部分を異なるものに変更します: "ProductCategory/{Category}/{subCategory}"
  2. 同じルートに、有効なカテゴリのみを許可し、カテゴリではないものを通過させる制約を追加します。

根本的な問題は、このアプリのルート構造があいまいであることです。「18」というサブカテゴリを持つ「詳細」というカテゴリがあった場合、どうなると思いますか? どのルートをマッピングする必要がありますか?

上記のオプション #2 の流れで、カテゴリ/サブカテゴリ ルートに追加できる制約は、たとえば、カテゴリ名を「詳細」にすることを許可しない RegEx 制約になります。これにより、ルートがスキップされますが、アプリが「詳細」というカテゴリを持つこともできなくなります。アプリで問題がなければ、問題なく動作するはずです。

于 2013-02-28T18:20:03.763 に答える