MVC 3:Ajax経由で読み込まれたときに、レイアウトページなしでビューをレンダリングする方法
プログレッシブエンハンスメントについて学び、AJAX化の見解について質問があります。MVC 3プロジェクトには、レイアウトページ、ビュースタートページ、2つのプレーンビューがあります。 viewstartページはViewsフォルダーのルートにあるため、すべてのビューに適用されます。すべてのビューが_Layout.cshtmlレイアウトページに使用する必要があることを指定します。レイアウトページには、各ビューに1つずつ、合計2つのナビゲーションリンクが含まれています。リンクは@Html.ActionLink()、ページへのレンダリングに使用されます。 今私はjQueryを追加し、これらのリンクを乗っ取り、Ajaxを使用してページにコンテンツを動的にロードしたいと考えています。 <script type="text/javascript"> $(function () { $('#theLink').click(function () { $.ajax({ url: $(this).attr('href'), type: "GET", success: function (response) { $('#mainContent').html(response); } }); return false; }); }); </script> これを行うには、2つの方法が考えられますが、どちらも特に好きではありません。 1)ビューのコンテンツ全体を取得して、それらを部分ビューに配置し、レンダリングされたときにメインビューに部分ビューを呼び出させることができます。こうすることRequest.IsAjaxRequest()で、コントローラーで使用して、要求がAjax要求であるかどうかに基づいて戻るView()か戻ることができPartialView()ます。Ajaxリクエストに通常のビューを返すことはできません。それは、レイアウトページを使用し、レイアウトページの2番目のコピーが挿入されるためです。ただし、@{Html.RenderPartial();}標準のGETリクエストでは、aのみを含む空のビューを作成する必要があるため、これは好きではありません。 public ActionResult Index() { if (Request.IsAjaxRequest()) return PartialView("partialView"); else return View(); } 次に、Index.cshtmlで次のようにします。 @{Html.RenderPartial("partialView");} 2)_viewstartからレイアウト指定を削除し、リクエストがAjaxでない場合は手動で指定できます。 public ActionResult Index() { …