3

自分のいる地域でルートを機能させるのに問題があります。

私のエリアはABCと呼ばれ、エリア内にHomeというコントローラーがあります。「http:// localhost:8000 / abc」を参照すると、Home / Indexでブレークポイントに到達できますが、「http:// localhost:8000 / ABC / details」などの詳細と呼ばれる別のアクションを実行しようとすると、 404。

私が試してみました

context.MapRoute(
           "details",
           "ABC/Home/{action}/{id}",
           new { action = "details", id = UrlParameter.Optional },
             constraints: null,
           namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }

       );



        context.MapRoute(
          "ABC_Home",
          "ABC/{controller}/{action}/{id}",
          new { controller = "home",action="Index", id = UrlParameter.Optional },
            constraints: null,
            namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
      );

これにより、「http:// localhost:8000 / ABC / Home / Details」を使用した場合に、アクションを実行できます。

 context.MapRoute(
           "details",
           "Home/Home/{action}/{id}",
           new {controller="home", action = "details", id = UrlParameter.Optional },
             constraints: null,
           namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }

       );

理想的には、可能であればURL内でホームを使用したくありません。私は何が間違っているのですか?

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

3

これには単一のルートが必要だと思います。/ABCで始まることで暗示されているように見えるため、ルートにコントローラーを含めないでください。コントローラーをデフォルト値として割り当てるだけです:

context.MapRoute(
    "ABC_Home",
    "ABC/{action}/{id}",
    new { controller = "home", action="Index", id = UrlParameter.Optional },
    constraints: null,
    namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
}

要件に応じて、これにより/abc/home/indexにルーティングされ、 /abc/details/home/ details にルーティングされます。

次に、他のコントローラーにアクセスする必要がある場合は、そのための別のルールを追加できます。これは、デフォルトのルールのようなものです。

context.MapRoute(
    "Default_Route",
    "{controller}/{action}/{id}",
    new { id = UrlParameter.Optional }
}
于 2012-05-17T04:44:58.943 に答える
0

変数のアクション名でコントローラーをデフォルトにすることはできないと思います。そうしないと、ルートから、それがアクションまたはコントローラーであり、どのルートに一致するかを判断する方法がありません。ただし、アクションをハードコーディングできると思います:

Context.MapRoute(
    "ABC_Home_Details",
    "ABC/Details/{id}",
    new { controller = "home", action="details", id = UrlParameter.Optionsl },
    constraints: null,
    namespaces: new [] { "WebApplication.Areas.ABC.Controllers" }
);
于 2012-05-17T04:51:04.750 に答える