仅从部分视图声明一次脚本

时间:2013-05-04 17:41:28

标签: jquery asp.net-mvc-4 razor partial-views

我有一个Razor PartialView,适用于Metro-UI风格的瓷砖。这是一个非常简单的PartialView,它允许我显示绑定到ViewModel的图块,真的没什么了不起的。

由于它并未在所有页面中使用,因此我不希望在每个页面加载时都包含jQuery块。相反,我更喜欢脚本与PartialView内联声明,但在页面代码中注册了一次。

视图如下(我重新设计了Metrofy模板)

@model IEnumerable<MetroStyleTile>


<div class="container tiles_hub">
    <div class="sixteen columns alpha">
        @foreach (MetroStyleTile tile in Model)
        {
            <div class="tile_item four columns alpha">
                <a href="@Url.Action(tile.Action, tile.Controller, routeValues: tile.MvcArea != null ? new { area = tile.MvcArea } : null)" class="tile">
                    @Html.Label(tile.Description)
                    @if (tile.ImageUrl != null)
                    {
                        @Html.Image(tile.ImageUrl.ToString(), tile.Title, htmlAttributes: new { @class = "tile_img" })
                    }
                </a>
            </div>
        }
    </div>

    @section Scripts{



        <script type="text/javascript">

            $(document).ready(function ($) {
                //Tiles hover animation
                $('.tile').each(function () {
                    var $span = $(this).children('span');
                    $span.css('bottom', "-" + $span.outerHeight() + 'px');
                });

                var bottom = 0;

                $('.tile').hover(function () {
                    var $span = $(this).children('span');
                    if (!$span.data('bottom')) $span.data('bottom', $span.css('bottom'));
                    $span.stop().animate({ 'bottom': 0 }, 250);
                }, function () {
                    var $span = $(this).children('span');
                    $span.stop().animate({ 'bottom': $span.data('bottom') }, 250);
                });
            });
        </script>
    }
</div>

当我在页面中仅使用PartialView一次时,上面的代码很好,但是如果我使用@Html.Partial两次,我会得到两次脚本。

现在让我澄清一下:我经常在StackOverflow上向平台提出问题了解更多,我通常不喜欢变通方法。

我可以使用Javascript全局变量来查看是否必须再次声明该函数。

我可以在布局中注册脚本,使其显示在所有页面中,不用担心。

我问的是如何只将脚本打印到Response一次。学习如何做到这一点允许我在这样开发多个PartialView时减轻页面有效负载(因此客户端仅在需要时才获取脚本,并且只在需要时才获取一次)。

我该怎么做?

0 个答案:

没有答案