我有一个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时减轻页面有效负载(因此客户端仅在需要时才获取脚本,并且只在需要时才获取一次)。
我该怎么做?