0

ルーティングについては、まだ理解できていないようです。

コントローラーが3つある

  • 管理者コントローラ
  • ダッシュボードコントローラー
  • プロジェクトグループコントローラ

ダッシュボードの場合、URL を にします/Dashboard/。ただし、管理セクションには、2 つの異なるコントローラーが必要です。/Admin/Overviewを使用する必要がありAdminController、使用/Admin/ProjectGroups/する必要がありますProjectGroupsController

これは私のルーティングがどのように見えるかです

 routes.MapRoute(
          name: "AdminOverivew",
           url: "Admin/Overview",
           defaults: new { controller = "Admin", action = "Overview" },
           namespaces: new[] { "Com.Controllers" }
        );

    routes.MapRoute(
      name: "AdminSubs",
       url: "Admin/{controller}/{action}/{id}",
       defaults: new { action = "Index", id = UrlParameter.Optional },
       namespaces: new[] { "Com.Controllers" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional },
        namespaces: new[] {"Com.Controllers"}
    );

*注、2 番目のルートの理由は、管理セクションの下にさらに多くのコントローラーがあるためです。

動作しています..ただし、HTML.ActionLink が生成する URL が間違っています。あるべきときに@Html.ActionLink("Dashboard", "Index", "Dashboard"........)生成されます。/Admin/Dashboard/Dashboard

ただし、@Html.ActionLink("Project Groups", "Index", "ProjecGroups".....)正しい URL を生成します/Admin/ProjectGroups

2 番目の routes.MapRoute (AdminSubs) を取り出すと、状況は逆になります。ダッシュボードは適切な URL を取得し、/Dashboardプロジェクト グループ/ProjectGroupsは残す必要がある場合になります/Admin/ProjectGroups

何を与える?

4

1 に答える 1

1

ルーターは と の「キャッチオール」の違いを認識しないため、さらにいくつかの明示的なルートが必要だと思いAdmin/{controller}/{action}/{id}ます{controller}/{action}/{id}。最初に一致したパターンが使用されます。

を取り除きAdmin/{controller}/{action}/{id}、admin プレフィックスの下にあるものをルートとして明示的に割り当てるか、逆に、ルートを削除して{controller}/{action}/{id}、ルート ディレクトリから切り離すルートを明示的に作成する必要があります。

于 2013-07-17T19:35:09.960 に答える