我是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>
...
有没有办法让MVC重新渲染渲染体,而不是每次页面发生变化时都要完整回发并重新加载导航菜单?
答案 0 :(得分:2)
首先,MVC不做“回发”。如果单击链接,那只是一个GET请求。如果您实际提交了表单,它会将请求作为POST发送,但目标可能是完全不同的视图或相同。
其次,默认情况下,单击链接或在Web浏览器中提交表单等操作会向服务器发送请求,然后完全将来自服务器的响应替换为用户的呈现视图。这需要服务器发回完整的HTML文档,包括任何相关的布局。
如果您只想替换HTML页面的一部分而不更改用户的视图,则需要使用AJAX。您发送AJAX请求以请求将返回部分视图的操作。换句话说,它不会利用您为Web应用程序定义的布局。然后,您负责用服务器的响应替换DOM客户端的适当部分。有许多客户端JavaScript库可以帮助您管理这种类型的工作流,但它们本身就是所有框架。换句话说,它们处理路由,模型,视图等。这些是所谓的SPA或单页应用程序。创建SPA时,服务器将降级为纯支持角色,仅提供允许您检索或更新数据的端点。出于这个原因,Web Api在这里是一个受欢迎的选择;因为所有的MVC机器都是不必要的。
如果您只是想通过不必呈现返回菜单的子操作来优化事物,则可以对子操作使用OutputCache,以便在一段时间内,操作不需要再次运行,它生成的HTML输出可以直接转储到布局中的适当位置。