- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在了解 Progressive Enhancement我对 AJAX 化 View 有疑问。在我的 MVC 3 项目中,我有一个布局页面、一个 View 起始页面和两个普通 View 。
viewstart 页面位于 Views 文件夹的根目录中,因此适用于所有 View 。它指定所有 View 都应使用 _Layout.cshtml
作为其布局页面。布局页面包含两个导航链接,每个 View 一个。这些链接使用 @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 的内容并将它们放在局部 View 中,然后让主视图在呈现时调用局部 View 。这样,在 Controller 中使用 Request.IsAjaxRequest()
,我可以根据是否返回 View()
或返回 PartialView()
该请求是一个 Ajax 请求。我无法将常规 View 返回到 Ajax 请求,因为那样它会使用布局页面,并且我会得到注入(inject)的布局页面的第二个副本。但是,我不喜欢这样,因为它迫使我为标准 GET 请求创建只有 @{Html.RenderPartial();}
的空 View 。
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return PartialView("partialView");
else
return View();
}
然后在 Index.cshtml 中执行此操作:
@{Html.RenderPartial("partialView");}
2) 当请求不是 Ajax 时,我可以从 _viewstart 中删除布局指定并手动指定它:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return View(); // Return view with no master.
else
return View("Index", "_Layout"); // Return view with master.
}
谁有更好的建议?有没有办法返回没有布局页面的 View ?如果它是一个 ajax 请求,那么明确地说“不包含你的布局”比如果它不是 ajax 则明确包含布局要容易得多。
最佳答案
在~/Views/ViewStart.cshtml
中:
@{
Layout = Request.IsAjaxRequest() ? null : "~/Views/Shared/_Layout.cshtml";
}
在 Controller 中:
public ActionResult Index()
{
return View();
}
关于c# - MVC 3 : How to render a view without its layout page when loaded via ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5318385/
我是一名优秀的程序员,十分优秀!