在MVC4项目中一次装入捆绑包

时间:2013-10-10 23:56:25

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

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

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

1 个答案:

答案 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;
}

运行应用程序并测试“关于”和“联系”页面