1

(免責事項: MVC の新機能)

ユーザーが productfolder/productname と productfolder/category/productname の両方でページを要求できるようにするカテゴリを使用して、Web サイトの製品リストをセットアップしようとしています。それは可能ですか?

一番近いのは、RouteConfig.cs RegisterRoutes メソッドに次のコードを追加し、ProductNameOne.cshtml を Views\Products ソリューション フォルダーに配置したことです。これにより、'.../Products/Index' および '.../Products/ProductNameOne' ページは表示されますが、'.../Products/CategoryOne/ProductNameOne' は 404 を返します。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(name: "Products", url: "Products/{action}/{id}",
            defaults: new { controller = "Products", action = "Index", id = 
            UrlParameter.Optional });


routes.MapRoute(name: "CategoryOneProducts", url: "Products/CategoryOne/{action}/{id}",
            defaults: new { controller = "Products", action = "ProductNameOne", id = 
            UrlParameter.Optional });

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
4

1 に答える 1

3

最初に最も具体的なルートでルートを注文する必要があります。

あなたの 404 URL は最初のルートと一致してCategoryOneいて、ID として存在しないために爆発していると推測しています。

CategoryOneルートが最初に試行されるようにルートを並べ替えます。

routes.MapRoute(name: "CategoryOneProducts", url: "Products/CategoryOne/{action}/{id}",
        defaults: new { controller = "Products", action = "ProductNameOne", id = 
        UrlParameter.Optional });

routes.MapRoute(name: "Products", url: "Products/{action}/{id}",
        defaults: new { controller = "Products", action = "Index", id = 
        UrlParameter.Optional });
于 2013-08-09T20:48:52.153 に答える