Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 带菜单的MVC布局_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 带菜单的MVC布局

Asp.net mvc 带菜单的MVC布局,asp.net-mvc,Asp.net Mvc,我是MVC新手,我正在尝试使用布局页面,到目前为止,我有以下布局页面: ... <div class="container-full body-content"> <h2>@ViewBag.Title</h2> <div class="row"> @if (Request.IsAuthenticated) { <div class="col-sm-3">

我是MVC新手,我正在尝试使用布局页面,到目前为止,我有以下布局页面:

...

<div class="container-full body-content">

    <h2>@ViewBag.Title</h2>
    <div class="row">
        @if (Request.IsAuthenticated)
        {
            <div class="col-sm-3">
                @{Html.RenderAction("MenuPartial", "Layout");}
            </div>
            <div class="col-sm-9" style="background-color:aqua">
                @RenderBody()
            </div>
                    }
                    else
                    {
                        @RenderBody()
                    }
    </div>
...
。。。
@视图包。标题
@如果(请求已验证)
{
@{Html.RenderAction(“菜单部分”、“布局”);}
@RenderBody()
}
其他的
{
@RenderBody()
}
...
有没有办法让MVC只重新渲染渲染体,而不是在每次页面更改时执行完整的回发并重新加载导航菜单?

首先,MVC不执行“回发”。如果你点击一个链接,那只是一个GET请求。如果您确实提交了表单,它将以POST的形式发送请求,但目的地可能是完全不同的视图或相同的视图

其次,默认情况下,在web浏览器中单击链接或提交表单等操作会向服务器发送请求,然后使用服务器的响应完全替换用户呈现的视图。这就需要服务器发回完整的HTML文档,包括任何相关的布局

如果只想替换HTML页面的一部分而不改变用户的视图,则需要使用AJAX。您发送一个AJAX请求来请求一个将返回部分视图的操作。换句话说,它不会使用您为web应用程序定义的布局。然后,您负责用服务器的响应替换DOM客户端的适当部分。有大量的客户端JavaScript库可以帮助您管理这种类型的工作流,但它们本身都是框架。换句话说,它们处理路由、模型、视图等。这些就是所谓的SPA或单页应用程序。创建SPA时,服务器将降级为纯支持角色,仅提供允许您检索或更新数据的端点。正是出于这个原因,WebAPI在这里是一个流行的选择;因为所有的MVC机器都是不必要的


如果您只是想通过不必呈现返回菜单的子操作来优化事情,那么您可以在子操作上使用OutputCache,这样在一段时间内,该操作将不需要再次运行,它生成的HTML输出可以直接转储到布局中的适当位置。

谢谢,我将查看OutputCache,它听起来像我需要的。