[英]partial view into master _layout in Asp.net mvc 4 razor
[英]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;
}
}
...
因此,我想做的是在部分视图中“打开”库,并使布尔值传播到主布局。 这样一来,我便可以在任意位置启用任意数量的库(许多局部视图,或多次使用一个视图),但是只包含一次。 最重要的是,我可以控制包含的顺序,因此可以确保首先包含文件依赖项。
我只是想知道是否有更好的方法来实现这一目标。
现在,我的两个最大问题是:
这是实现目标的一种简单方法。
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.