MVCサイト用のプラグインを作成中に、コントローラの解像度に関する問題に直面しています。@ Html.Action and Controllers with same name
- Plugin.Controllers.ProductController(管理者1から継承):全体溶液中の3つのProductControllerのクラスがあり
routes.MapRoute("Route1", "Admin/Product/{action}/{id}", new { controller = "Product", action = "Index", area = "Admin", id = UrlParameter.Optional }, new[] { "Plugin.Controllers" } ) routes.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { controller = "Home", action = "Index", area = "Admin", id = "" }, new[] { "Admin.Controllers" } ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "Public.Controllers" } );
:ここ
は、現在のコンテキストに関係したすべてのルートです
- Admin.Controllers.ProductController
- Public.Controllers.ProductController 私の見解 "/Views/Home/Index.cshtml" では
(すなわち、
@Html.Action("HomepageProducts", "Product")
それは、Public.Controllers .ProductControllerのアクション「HomepageProducts」を参照:任意の領域なしにHomeControllerの「インデックス」アクション)私は、次のコードを持っています。 [HttpException(0x80004005が)
:パブリックアクションメソッド「HomepageProductsが」コントローラ」Plugin.Controllersに見つかりませんでした
MVCではなく公衆一方のプラグイン・コントローラを探し、次の例外をスロー.ProductController」] System.Web.Mvc.Controller.HandleUnknownAction(文字列actionNameの)291 System.Web.Mvc.Controller.b__1d(たIAsyncResult asyncResult、ExecuteCoreState innerState)+31 System.Web.Mvc.Async。 WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase
1.End()+49 System.Web.Mvc.Cont roller.EndExecuteCore(たIAsyncResult asyncResult)+36 System.Web.Mvc.Controller.b__15(たIAsyncResult asyncResult、コントローラ制御部)+12 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +22 System.Web.Mvc.Async.WrappedAsyncResultBase
1.End()+49 System.Webのに.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)+10 System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult、ProcessRequestState innerState)21 は1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase
1.End()+49 System.Web.Mvc.MvcHandler.EndProcessRequest(たIAsyncResult asyncResult)28 System.Web.Mvc.MvcHandlerをSystem.Web.Mvc.Async.WrappedAsyncVoid。 System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+ 9 System.Web.Mvc。 <> c__DisplayClassa.b__9()+22 System.Web.Mvc。 <> c__DisplayClass4.b__3()+10 System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1のFUNC)27[HttpException(0x80004005が):子要求の実行に失敗しました。詳細については、InnerExceptionを調べてください。] System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func)+102 System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(アクションアクション)+64 System.Web.Mvc。サーバーエクステンション。ExecuteInternal(IHTTPハンドラハンドラ、たTextWriterライター、ブールpreserveForm、ブールsetPreviousPage、VirtualPathパス、VirtualPath filePathに、文字列physPath、例外エラー、文字列queryStringOverride)1436
[HttpException(0x80004005が):Erreur D'実行・デ・ラ・demandeランファンを注ぎます(System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper ')。 System.Web.HttpServerUtility.ExecuteInternal(IHttpHandlerハンドラ、TextWriterライタ、ブールpreserveForm、ブールsetPreviousPage、VirtualPathパス、VirtualPath filePath、文字列physPath、例外エラー、文字列queryStringOverride )+3428452 System.Web.HttpServerUtility.Execute(IHttpHandlerハンドラー、TextWriterライター、ブールpreserveForm、ブールsetPreviousPage)+76 System.Web.HttpServerUtility.Ex ecute(IHttpHandlerハンドラー、TextWriterライター、ブールpreserveForm)+29 System.Web.HttpServerUtilityWrapper.Execute(IHttpHandlerハンドラー、TextWriterライター、ブールpreserveForm)+24 System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper、String +464 System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper、String actionName、String controllerName、RouteValueDictionary routeValues)+83 System.Web.Mvc.Html.ChildActionExtensionsこのトピックについてのご意見・ご感想をEメールにてお寄せください(日本語と英語に対応しています)。 .Action(HtmlHelper htmlHelper、String actionName、String controllerName)+10 c:\ Path \ To \ My \ Project \ Views \ Home \ Index.cshtmlのASP._Page_Views_Home_Index_cshtml.Execute():14
これが役立つ場合、ソリューションはAutofac.MVC5を使用します。 ヘルプ/コメント/アイディアを歓迎します。
コントローラーの解像度に何かがないか、ルートのみが暗示されていますか?
UPDATE
すべてのアクションがうまく行われている「管理者」エリアを閲覧、プラグインおよび管理コントローラが正常に動作します。
プラグインのルートにコメントすると、エラーはもうスローされません。もちろん、私のプラグインコントローラはもはや呼び出されません。
// routes.MapRoute("Route1",
// "Admin/Product/{action}/{id}",
// new { controller = "Product", action = "Index", area = "Admin", id = UrlParameter.Optional },
// new[] { "Plugin.Controllers" }
//)
だから私は、問題は、プラグインのルート、プラグインコントローラ自体やルートがMVCによって解決される方法によるものであると思いますか?
@Html.Action("HomepageProducts", "Product", new { area = "" })
しかし、MVCエリアを無視して、プラグインをロードしよう:
UPDATE 2
は、私はすべてのルートのコメントを解除し、次のように)(@ Html.Actionでエリアを指定しようとしましたコントローラ...
[HttpException(0x80004005が):公共のアクションメソッド 'HomepageProducts' 'は、コントローラ上で見つかりませんでしたPlugin.Controllers .ProductController」。]
あなたのコントローラでは、 'Plugin.Controllers.ProductController' ..' View'を返す 'HomepageProducts'という名前の' ActionResult'メソッドがありますか? –
いいえ、私はしません。公開されている人だけがこのアクションを持っています –
あなたのRoute.configでは、特に 'Route 1'のために、これが起こっていると思います。' @Html.Action( "HomepageProducts"、 "Product") ' 'Route 1'で提供したURLと一致する' Product' Controllerに行きます。 –