对于包含加载了包的_layout.cshtml的MVC项目,每次加载视图时单击都会加载布局和包。是否有任何内置机制,我可以用它来加载最初的东西,以便RenderBody()只加载我还没有的内容(不重新加载布局)?这是部分进入的地方吗?
如果partials是处理它的正确方法,这是否意味着我需要有两个版本的每个控制器方法(一个有布局,一个没有)?这里的任何提示都会很棒。
答案 0 :(得分:1)
据我所知,没有内置机制只能一次加载布局页面。如果您希望一次只加载布局,那么您可以使用客户端方法来实现它,以便它对服务器来说更轻。这是一步。创建MVC 4应用程序。
在_Layout.cshtml中添加一个div,用于保存要加载的html页面。在我的情况下“页面持有人”
<div id="body">
<div id="pageholder">
@RenderSection("featured", required: false)
<section class="content-wrapper main-content clear-fix">
@RenderBody()
</section>
</div>
</div>
在_Layout.cshtml
中添加此脚本@Scripts.Render("~/Scripts/common.js")
<script type="text/javascript">
$(document).ready(function() {
$('.pagelink').click(function() {
var settings = {
'url': $(this).attr('url'),
'type': 'GET',
'dataType':'html'
};
get_html(settings);
});
});
</script>
修改菜单链接
<nav>
<ul id="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li><a href="#" class="pagelink" url="/home/about">About</a></li>
<li> <a href="#" class="pagelink" url="/home/contact">Contact</a></li>
</ul>
</nav>
添加js文件并将其命名为common.js并添加此内容
function get_html(settings) {
settings.success = function(data) {
$('#pageholder').empty().html(data);
};
settings.error = function (xhr, ajaxOptions, thrownError) {
alert(xhr.statusText);
};
$.ajax(settings);
}
设置Layout = null; “关于”和“联系”视图
@{
ViewBag.Title = "About";
Layout = null;
}
运行应用程序并测试“关于”和“联系”页面