1

別のアセンブリに領域を作成しようとしています。RouteDebugger によると、ルートは正しいように見えますが、「パス {0} のコントローラーが見つからないか、IController を実装していません」というメッセージが表示されます。エラー。

コントローラーがコンテナーに登録されていることを確認しましたが、ルートで指定している別の名前空間の下にあります。

ルート登録:

    routes.MapRoute(
        "EventCalendar", 
        "EventCalendar/{action}/{id}", 
        new { controller = "EventCalendar", action = "Index", id = UrlParameter.Optional }, 
        new[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }
    );

コントローラ:

namespace MyAssembly.MyName.Controllers
{
    public class EventCalendarController : Controller
    {
        public PartialViewResult Index()
        {
            return new PartialViewResult
            {
                ViewName = "~/Views/EventCalendar/Index.cshtml",
                ViewData = new ViewDataDictionary<object>(this.ViewData.Model)
            };
        }
    }
}

コントローラーの名前空間と親の名前空間の両方をルートで指定しています。私が見た例は、どれが必要かについて明確ではありません。OrchardCMS は、親の名前空間を使用します。ルートは正しく登録されていますか?

コントローラーがコンテナー内にあり、名前空間が一致している限り、コントローラーは解決され、正しく呼び出されるはずです。メイン アセンブリのコントローラは正常に動作します。

4

2 に答える 2

0

そのために依存性注入を使用することをお勧めします。私は同様のアプローチ (分離されたアセンブリの一部のコントローラー) でプロジェクトに取り組んでおり、Unity を使用してコントローラーを MVC プロジェクトに挿入しています。このURLが参考になるかもしれません

また、タイプを解決できるように、対応する dll が MVC プロジェクトの bin フォルダーにあることを確認してください。

于 2012-04-16T19:45:58.667 に答える
0

これがそうだとしたら、私は実際に驚くでしょうが、MapRoute が期待する Namespace 配列は、オブジェクトではなく文字列型です。

new string[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }
于 2012-04-16T19:46:26.323 に答える