2017-12-06 17 views
0

領域とルーティングの問題...ここAsp.net MVCレイアウト - 私はMVCのルーティングの問題を持っている(あるいは、少なくとも私はそれがMVCルーティング:)だと思う)

は、私の仕事の内容は、フローの

私のプロジェクトでは、私は別のユーザー賢明なlogin.thisを完全にログインセクションをカスタマイズして作成する必要があります。 これは、私のメニューバーhtmlを、そのレイアウトページのajax関数 $(document).ready(function())を呼び出すことによって追加することでした。

コード:

$(document).ready(function() { 
     $("#divProcessing").show(); 
     $.ajax({ 
      url: '@Url.Action("UICustomize", "Home")', 
      data: { 
      }, 
      type: 'POST', 
      cache: false, 
      success: function (data) { 

       if (data != '') 
       { 
        $('#sidemenulist').append(data); 
        $("#divProcessing").hide(); 
       } 
       else { 
        location.href = "/Home/Login"; 
       } 

      } 
     }); 
}); 

"UICustomize"、 "ホーム"

enter image description here

今、UIは何も問題はありませんアップにこの部分wise.so動的にユーザーを変更しました。

その後、私は特定のモジュールのためのasp.net mvcで賢明な領域を使用する必要があります。 それから問題が発生しています。 私のパスは変更されているので、このエリアでは私はレイアウトajax関数を使用できません。

enter image description here '/ ClientManagement /ホーム/ UICustomize' enter image description here

私はホーム/ UICustomizeにそのパスをリダイレクトします。 これはどのように行うことができますか?ここ

はルートです: RouteConfig

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional } 
    ); 

エリア

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "ClientManagement_default", 
      "ClientManagement/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 

     ); 

    } 
+1

もしあなたがエリアメソッドを必要としないなら、それを 'null'に設定してください - ' @ Url.Action( "UICustomize"、 "Home"、new {area = ""}) ' –

+0

@StephenMueckeそれはここですか? これは私のajax呼び出しのurl-url: '@Urlです。"/ ClientManagement/Home/UICustomize '、 – TDM

+1

私のコメントを読んでください - ' new {area = ""}}を追加して生成します'/ Home/UICustomize'を実行します。しかし、なぜあなたはメニュー/サイドバーを生成する子アクションを呼び出すために '@ Html.Action()'を使用する代わりに、このためにajaxを使用していますか? –

答えて

1

Url.Action()は、なぜそのお住まいの地域の名前でURLを生成している現在の領域を使用するようにデフォルト設定されます。それを削除するには、あなたのケースで/Home/UICustomize代わりの/ClientManagement/Home/UICustomizeを生成します

$.ajax({ 
    url: '@Url.Action("UICustomize", "Home", new { area = "" })', 
    .... 

を使用しています。

ただし、ajaxを使用してサイドバーをレンダリングしないでください。代わりに、(それは、ユーザがナビゲートすることができないので)、[ChildActionOnly]属性であなたにUICustomize()方法を飾る、そしてあなたのレイアウトで、あなたの部分図を描画するために

@Html.Action("UICustomize", "Home", new { area = "" }) 

または

@{ Html.RenderAction("UICustomize", "Home", new { area = "" }); } 

を使用サイドバーメニュー。

関連する問題