@Html.MvcSiteMap().SiteMapPath()
ブレッドクラムトレイルを構築するために使用しています。
私は2つのコントローラーを持っています.1つはDealsContorllerBaseのクラスから継承されたDealsControllerです。どちらのクラスにも独自の Index() メソッドがあり、子の Index() が親クラスの Index() をオーバーライドします。私の Mvc.sitemap では:
<mvcSiteMapNode title="Deals" controller="Deals" action="Index" >
<mvcSiteMapNode title="Deal" controller="Deals" action="ShowSpecificDeal" />
</mvcSiteMapNode>
RegisterRoute 関数では:
...
routes.MapRoute(
"Deals", // Route name
"Deals", // URL with parameters
new { controller = "Deals", action = "Index" }, // Parameter defaults
new[] { "InvestX.UI.Web", "InvestX.UI.Controllers" } // namespaces
);
...
「InvestX.UI.Web」プロジェクト内で定義された DealController と、「InvestX.UI.Controllers」プロジェクト内で定義された DealsControllerBase。
この例外全体:
あいまいなコントローラー。「DealsController」のコントローラー タイプが複数見つかりました。一致したタイプは次のとおりです。
InvestX.UI.Web.Controllers.DealsController InvestX.UI.Controllers.DealsControllerBase`1
コントローラーの名前空間を ControllerBuilder.Current.DefaultNamespaces に追加して検索する場所を絞り込むか、ControllerTypeResolverFactory の areaNamespacesToIgnore パラメーターに追加して名前空間を除外することを検討してください。
DealsController が DealsControllerBase から継承されておらず、DealsController を使用するだけであれば、すべて問題ありません。この例外は、DealsController または DealsControllerBase のどちらの Index() アクションを実行するかによって発生しました。私の質問は、 mvcSiteMapNode がこのような親/子コントローラー階層をどのように処理するかです。