繁体   English   中英

ASP.NET MVC 3 Razor部分视图-主布局中包含jQuery

[英]ASP.NET MVC 3 Razor Partial View - jQuery Included In Main Layout

我正在使用的部分视图需要包括某些jQuery库,而我目前正试图考虑最佳地添加它们的最佳方法。

我当前的设置如下:

_Layout.cshtml:

...
@if (ViewBag.jQuery)
{
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"
            type="text/javascript"></script>
}
...

Index.cshtml:

...
@{ Html.RenderPartial("PartialView", 
       new MVCModel.Models.MyModel(), 
       new ViewDataDictionary { { "ViewBag", ViewBag } }); }
...

PartialView.cshtml:

...
@{
    if (ViewBag.ViewBag != null)
    {
        var vb = (dynamic)ViewBag.ViewBag;
        vb.jQuery = true;
    }
}
...

因此,我想做的是在部分视图中“打开”库,并使布尔值传播到主布局。 这样一来,我便可以在任意位置启用任意数量的库(许多局部视图,或多次使用一个视图),但是只包含一次。 最重要的是,我可以控制包含的顺序,因此可以确保首先包含文件依赖项。

我只是想知道是否有更好的方法来实现这一目标。

现在,我的两个最大问题是:

  1. ViewBag的类型不是很严格,因此intellisense不会告诉我哪些库可供我使用。
  2. 将ViewBag传递到局部视图,以便我可以重复使用它。

这是实现目标的一种简单方法。

MVC Razor视图中有一个称为RenderSection的函数。 它的语法像

@RenderSection ("occasionalScripts", false)

(occasionalScripts是该部分的名称,false表示该部分是可选的,可能不会出现在每个页面中。)

您可能希望将此包含在Views\\Shared _Layout.cshtml中。 如果为特定视图定义了脚本定义,这将允许您的主脚本模板显示包含脚本定义的部分。

通常,您希望将其放在页面底部</body>标记之前。 (这是提高性能的最佳实践。)我将在其上方列出所有其他脚本(加载在每个页面上的脚本)。 原因是因为jQuery脚本的加载顺序非常重要。

在每个具有特殊脚本的视图中,添加以下内容:

@section occasionalScripts {
... put script references here
}

如果您有不需要特殊脚本的视图,则无需在其中包括此部分。 @RenderSection标记上的false将容纳任何缺少@section标记的视图。

在实现此功能的每个页面上,您可以选择不同的脚本。

(可选)您可以为不同类别的文件定义多个部分。

我通常采用不同的方法,并认为应该在每个页面上引用网站上使用的所有库 它的确会使第一次加载的速度变慢,但是随后的所有后续页面的加载速度却更快,因为它使用了浏览器缓存。

为了更好地改善它,您可以使所有库仅在一个文件中可用。

在某些时候,我使用了SquishIt 我在ASP.NET MVC中的集成非常好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM