MVC 3:如何通过Ajax加载没有其布局页面的视图?
我正在学习渐进增强功能,并且对AJAXifying视图有疑问。在我的MVC 3项目中,我有一个布局页面,一个viewstart页面和两个纯视图。 viewstart页面位于Views文件夹的根目录中,因此适用于所有视图。它指定所有视图均_Layout.cshtml应用于其布局页面。布局页面包含两个导航链接,每个视图一个。链接用于@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> 我可以想到两种方法来执行此操作,但是我并不特别喜欢其中一种: 1)我可以获取整个View的内容并将它们放在局部视图中,然后在渲染时让主视图调用局部视图。这样Request.IsAjaxRequest(),我就可以在控制器中使用,根据请求是否为Ajax请求来返回View()或返回PartialView()。我无法将常规视图返回到Ajax请求,因为那样它将使用布局页面,并且我将获得注入的布局页面的第二个副本。但是,我不喜欢这样,因为它迫使我创建一个空视图,其中只包含一个@{Html.RenderPartial();}用于标准GET请求的视图。 public ActionResult Index() { if (Request.IsAjaxRequest()) return PartialView("partialView"); else return View(); } 然后在Index.cshtml中执行以下操作: @{Html.RenderPartial("partialView");} 2)我可以从_viewstart中删除布局名称,并在请求不是Ajax时手动指定它: public ActionResult Index() { …