0

詳細アクションのみを非表示にするために URL 書き換えを実行しようとしています。

  • 現在の URL は次のとおりです: /subject/details/9839/MONTAGUT-FRENCH-ROMANTICS
  • 次のように変更します: /subject/9839/MONTAGUT-FRENCH-ROMANTICS
  • ただし、このコントローラーにはまだ他のアクションがあります。他のすべてのアクションが /subject/category/1/RESTAURANTSのような URL に表示され続けるようにする必要があります。
  • とにかくそれを機能させることはありますか?

私たちのmapRouteは次のとおりです。

routes.MapRoute(
            name: "SubejctDetails",
            url: "{controller}/{action}/{id}/{title}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );
4

1 に答える 1

1

このルートを試してください:

routes.MapRoute(
            name: "SubjectDetails",
            url: "{controller}/{id}/{title}",
            defaults: new { controller = "Home", action = "details", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );

それはあなたが望むことを達成するはずです(それを「デフォルト」ルートの上に置いてください)。

私の恐れは、ルートエンジンが、より古典的なルートがいつ必要かを判断できないことです/controller/action

ルートの混乱を避けるために、別のパラダイムを検討してください。固定名コントローラーまたは先頭のスラッグを使用します。その場合、先頭のスラッグを含まないルートは無視されます。

routes.MapRoute(
            name: "SubjectDetails",
            url: "subject/{id}/{title}",
            defaults: new { controller = "subject", action = "details", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );

これで、ルートは「subject/」で始まるURLにのみ適用されます。

于 2013-03-13T17:54:34.497 に答える