私たちは異なる領域を持つMVCアプリケーションを持っています。現時点では、1つのエリアが登録されていて(configで定義されています)、エリア登録でルート登録は行われません。 Url.Actionメソッドが機能しなくなったため、ルーティングに関する問題が発生しました。私の簡素化RouteConfigは、次のようになります。MVC5 Url.Actionは領域内でnullを返します
routes.MapRoute(
name: "Second",
url: "second/{action}/{id}",
defaults: new { controller = "Second", action = "Action", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Areas.MyArea.Controllers" }
).DataTokens["area"] = "MyArea";
routes.MapRoute(
name: "Home",
url: "home/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Controllers" }
);
問題は、私はMyAreaで第二のコントローラにAction.cshtml内@Url.Action("Index", "Home")
を呼び出すしようとすると、それはnullを返しますということです。ホームコントローラのIndex.cshtmlで同じものを呼び出すとうまく動作します。私は@Url.Action("Index", "Home", new {Area = ""})
をAction.cshtmlで使用するとうまくいくが、なぜこれが起きているのかを知った。ルート値なしでちょうど@Url.Action("Index", "Home")
を呼び出すことができないようにするにはどうすればよいですか?