gpt4 book ai didi

c# - MVC 3 : How to render a view without its layout page when loaded via ajax?

转载 作者:IT王子 更新时间:2023-10-29 03:31:18 25 4
gpt4 key购买 nike

我正在了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com