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

标签 c# asp.net-mvc asp.net-mvc-3 master-pages razor

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

相关文章:

c# - 在 webgrid 中调用 javascript

以 WCF 为模型的 ASP.NET MVC3

c# - IQueryable with Foreach 结果

c# - 聚合事件网格事件

c# - 使用 "startup applications"在 Ubuntu 中启动时运行 Mono App

asp.net-mvc - ASP.NET MVC2(ala RSpec)中的测试 View

c# - 不一致的可访问性 : Base Class is less accessible than class

c# - Asp.net Identity 2.0 临时密码

c# - nopCommerce 3.70 中的 bootstrap Mega Menu

Asp.net MVC 3 用户帐户和配置文件