2

对于包含 _layout.cshtml 并加载了包的 MVC 项目,每次加载视图时单击都会加载布局和包。是否有任何内置机制可用于仅在最初加载这些内容,以便 RenderBody() 仅加载我还没有的内容(不重新加载布局)?这是局部派进来的地方吗?

如果部分是处理它的正确方法,这是否意味着我需要每个控制器方法的两个版本(一个有布局,一个没有)?这里的任何提示都会很棒。

4

1 回答 1

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);
}

设置布局 = null; 关于和联系人视图

@{
    ViewBag.Title = "About";
    Layout = null;
}

运行应用程序并测试 About 和 Contact 页面

于 2013-10-11T04:39:07.370 回答