0

私は次の問題を抱えています:私のMVCプロジェクトには、同じ名前で名前空間が異なるコントローラーが他にもあります

  • Web.Controllers.HomeController
  • Web.Controllers.CustomerController
  • Admin.Controllers.HomeController
  • Admin.Controllers.CustomerController

これまでの私の唯一のルートは次のとおりです。

var DefaultRoute = routes.MapLocalizedRoute("default",
                            "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                      new[] {"Admin.Controllers"});
DefaultRoute.DataTokens["UseNamespaceFallback"] = true;

デフォルトのフォールバックは次のとおりです。

ControllerBuilder.Current.DefaultNamespaces.Clear();
ControllerBuilder.Current.DefaultNamespaces.Add("Web.Controllers");

常に名前空間 Admin のコントローラーを取得しようとする意図で、コントローラーがまだ実装されていないが名前空間 Web にある場合は、これを取得します。これは機能しますが、問題が発生します

@HTML.Action("Login","Customer");

どうやら、元のコントローラーの名前空間を無視して、常に Web.Controllers を取ります。

どうにかしてそれを機能させることはできますか?

ありがとう

4

1 に答える 1

2

あなたの問題を見ると、Webコントローラーがメインコントローラー(共有)であり、管理コントローラーがエリア内にあるようです。

エリア内のコントローラーに移動するHtml.Actionには、エリア名を明示的に指定する必要があります

のように@Html.Action("Login", "Customer", new { area = "Admin" })

于 2013-08-29T09:56:11.170 に答える