2017-01-29 19 views
0

私はプロジェクトに取り組んでいます。すべてのページが変更されたときにレイアウトビューが再ロードされないように、ビューを部分ビューに変更することにしました。ユーザーは、私は今、次のようにjqueryのAJAXを使用していたナビゲーションメニューのメニュー項目のいずれかをクリックしたときにビューをロードするために: -ASP.NET MVCパーシャルビュー+ Ajaxロード

$("ul.metismenu a:not(.subMenuParent)").unbind().click(function (e) { 

    e.preventDefault(); 

    var url = $(this).attr("href"); 
    window.history.pushState("", "", url); 

    $.ajax({ 
     url: url, 
     dataType: 'html', 
     success: function (data) { 

      $('#page-content').html(data); 

     } 
    }); 
}); 

要素のページコンテンツがレイアウトビューに存在します。それはうまくいきますが、私が今直面している問題は、ビューに直接アクセスしようとすると、ブラウザで直接/ダッシュボードに行くと言うと、レイアウトページなしで部分的なビューしか表示されません。私はこれをどうやって解決してくれるの?事前にアドバイスをありがとうございます。変数を使用することにより、あなたは別のコントローラのアクションから設定異なるレイアウトを持つことができPartialView()

+0

部分ビューで '@ {Layout ="〜/ Views/Shared/_Layout.cshtml "}'を追加するだけです。 – mmushtaq

+0

@ mmushtaq私はすでにそれを試みましたが、レイアウトは2度レンダリングされました – krafo

+0

部分的なビューを返すコントローラアクションをどのように共有できますか? –

答えて

0

あなたのURL呼び出しMVC Action、あなたのリターンActionResultを作ります。 ViewBagでも十分です。アクションDashboardの場合、View HTMLにViewBag.Layoutを設定し、ViewBag.Layoutを空に設定できる部分ビューに対しては設定できます。 HTMLページでこの変数を使用します。したがって、私たちが呼んでいるアクションに応じて適切なレイアウトが選択されます。

+0

私のアクションはActionResultを返し、既にPartialView()を返しています – krafo

+0

'@ {Layout = string.Empty; } ' –

+0

jquery.unobtrusive-ajax.jsはデフォルトでは含まれていません。それを追加することで問題を解決することができます。 –

1

+0

あなたは正しい方向に私を指摘してくれてありがとう。あなたのおかげで私は思いついたので、私は思いついた修正を投稿し、あなたのフィードバックを答えとしてマークしました。 – krafo

+0

助けてくれてうれしい!! –

0

まず、リクエストがajaxリクエストかどうかを確認して問題を解決できました。次に、要求のタイプに応じてレイアウトビューを設定します。

public ActionResult Index() 
    { 
     if (!Request.IsAjaxRequest()) 
     { 
      ViewBag.Layout = "~/Views/Shared/_Layout.cshtml"; 
     } 
     return PartialView(); 
    } 

、私は次のように設定した部分図で: - - :

@{ 
     Layout = ViewBag.Layout; 
    } 

希望、これは同じ問題が発生する可能性のある人を助けこれはアクションからのサンプルコードです。

関連する問題