2016-03-30 7 views
0

私たちは異なる領域を持つ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")を呼び出すことができないようにするにはどうすればよいですか?

答えて

1

これは問題ではありませんが、実際は適切な動作です。

@ Url.Action()または@ Html.ActionLinkを使用すると、デフォルトでは呼び出されている領域が使用されます。この場合のように別の領域にリンクしたい場合は、既に見つかったパラメータ領域を指定する必要があります。

この特定のケースでは、ルート領域にリンクしようとしているときに、パラメータを空の文字列として指定する必要があります。 ({エリア= ""})

関連する問題