在ASP.NET MVC 5中,在每次不加载布局的情况下,仅渲染视图的最佳方式是什么?

在ASP.NET MVC 5中,在每次不加载布局的情况下,仅渲染视图的最佳方式是什么?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我想在每次都不加载布局的情况下渲染视图。什么是最好的方法? 另外,使用局部视图对我来说不是解决方案。您必须在视图或_ViewStart删除布局。有时很难说您希望如何加载布局,但在视图顶部,您可以检查条件: @{ if (/* your criteria here */) { Layout = "path to your layout file"; } else { Layout = null; } } 例如,如果希望不加载ajax请求中的

我想在每次都不加载布局的情况下渲染视图。什么是最好的方法?
另外,使用局部视图对我来说不是解决方案。

您必须在视图或_ViewStart删除布局。

有时很难说您希望如何加载布局,但在视图顶部,您可以检查条件:

@{
    if (/* your criteria here */) {
        Layout = "path to your layout file";
    } else {
        Layout = null;
    }
}

例如,如果希望不加载ajax请求中的请求,则首先通过modyfing检查该请求是否为ajax请求:

In ~/Views/ViewStart.cshtml
如下图所示:

@{
    Layout = Request.IsAjaxRequest() ? null : "~/Views/Shared/_Layout.cshtml";
}
在控制器中:

public ActionResult Index()
{
    return View();
}

您希望视图得到处理,布局是静态的(如缓存),只需刷新布局中的零件即可。不,你不能。发布页面时,所有内容(整个页面)都会被清除(除了一些特定的内容,如cookies),页面会为服务器响应做好准备。使用完整的ajax站点是可能的。或者,作为一种奇怪且昂贵的解决方案,您可以将布局页面保存在cookie中,然后如果设置了cookie(如etr所述),则在布局中返回null。您可以从cookie读取布局页面,或者以类似的方式,尝试客户端缓存。web浏览器不是您的应用程序,您不能说“此部分应保持位置,只需更改此部分”。如果不使用xmlhttprequest或websocket,每个页面都是一对请求-响应组合。

最好的方法是,如果您不需要布局,就不要使用布局。你可能想澄清你的问题,以解释你到底想要实现什么。不,我需要布局。但我不希望每次都加载布局,我需要一些东西,比如AJAX UpdatePanel(在ASP.NET Web表单中)。您是否只希望在特定条件下加载布局?如果出现这种情况,请加载布局,否则不加载布局?因此在视图的开头设置layout=“”。您所说的基本上是一个SPA(单页应用程序)。为此,您可以使用Angular之类的工具将MVC执行的所有功能移动到客户端,以执行路由、数据访问、处理视图(javascript模板)等。此时,MVC本身就变得毫无意义了。传统上,对于SPA来说,它将由WebAPI等支持,而不是MVC,因为您所需要的只是获取数据的方法。