2

enter image description here私のMVC5プロジェクトにレイアウトページがあり、以下に示すように左側のメニューリンク(ハイパーリンク)をクリックして、すべてのページコンテンツ(部分的なビュー)をレンダリングしたいとします。 Ajaxなどを使用していくつかの方法がありますが、私のニーズを最もよく満たす方法はわかりません。 LayoutページとControllerメソッドを含むこの問題に関する例はありますか?PartialViewをMVCのレイアウトページにレンダリングする最良の方法は何ですか?

答えて

3

あなたが最初のdivであなたの体の内容をラップし、それに任意のIDを割り当てる必要があり:

<div id="divContentArea"> 
@RenderBody() 
</div> 

スクリプトメニューをクリックしてイベントに:

$(".menuLinkItem").click(function (e) { 
    e.preventDefault();   
    var controllerName = $(this).attr('data-controllername'); 
    var actionName = $(this).attr('data-actionname'); 

    if (String(actionName).trim() == '') { 
     return false; 
    } 
    if (typeof (controllerName) == "undefined") { 
     return false; 
    } 

    var url = "/" + controllerName + "/" + actionName; 

    //Open url in new tab with ctrl key press 
    if (e.ctrlKey) { 
     window.open(url, '_blank'); 
     event.stopPropagation(); 
     return false; 
    }    

    $.ajax({ 
     url: url, 
     type: 'POST', 
     success: function (data) { 
      var requestedUrl = String(this.url).replace(/[&?]X-Requested-With=XMLHttpRequest/i, ""); 
      if (typeof (requestedUrl) == "undefined" || requestedUrl == 'undefined') { 
       requestedUrl = window.location.href; 
      } 

      // if the url is the same, replace the state 
      if (typeof (history.pushState) != "undefined") { 
       if (window.location.href == requestedUrl) { 
        history.replaceState({ html: '' }, document.title, requestedUrl); 
       } 
       else { 
        history.pushState({ html: '' }, document.title, requestedUrl); 
       } 
      } 

      $("#divContentArea").html(data);     

     }, 
     error: function (xhr) { 
     } 
    }); 

}); 

はコントローラー:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
public PartialViewResult Index() 
{ 
     if (HttpContext.Request.HttpMethod == "GET") 
     { 
      return View(); 
     } 
     else 
     { 
      return PartialView(); 
     } 
} 
+0

返信いただきありがとうございます。少し問題があります。 Firebugを使って** success:function(data){** lineを渡そうとした後、エラーがあります** ReferenceError:データが定義されていません**。私はまた、データパラメータを定義しようとしましたが、テストのために整数値を取りますが、意味がありませんでした。何か案が? –

+0

それは仕事でなければなりません、それは私の作業コードです –

+0

この例では** data **のように定義されていないパラメータがありますか? –

関連する問題