如果捆绑包已经加载,是否有内置的跟踪方法?我有几个编辑视图,例如需要 jquery 和 jquery.Validate 等库。我不需要在主布局页面上引用。由于一个页面可能包含几个不同的条件库......理想情况下,我希望@scripts.Render 知道我是否已经引用了一个库并阻止它重新加载。
干杯蒂姆
如果捆绑包已经加载,是否有内置的跟踪方法?我有几个编辑视图,例如需要 jquery 和 jquery.Validate 等库。我不需要在主布局页面上引用。由于一个页面可能包含几个不同的条件库......理想情况下,我希望@scripts.Render 知道我是否已经引用了一个库并阻止它重新加载。
干杯蒂姆
Hao Kung 正在解决系统知道您已经在页面上包含捆绑包并避免添加重复项的能力。这类似于WordPress 的 enqueue script/style所做的。MVC 还没有这个。您必须自己构建它。
user108 正在为您的问题提供可能的解决方案。他/她说在您的布局中您可以创建一个可选的“脚本”部分。然后,在需要 jquery 验证代码的视图中,您可以将其包含在布局的“脚本”部分中。这将完成您正在寻找的大部分内容。唯一不起作用的地方是,如果您在同一页面上有多个视图部分,都需要 jquery 验证代码。
你可以很容易地自己实现一个解决方案。这是一个可以帮助您入门的 SO 帖子。
听起来您要求的更像是资产管理,您可以在其中多次注册脚本,并拥有一个 API 来自动删除重复数据并呈现适当的列表。这在我们的待办事项列表中,但它目前还不是 API 的一部分。
如果这是你想要的,你可以在我们的 codeplex 网站上投票: 这个问题
试试这个:
public static MvcHtmlString RequireClientScript(this HtmlHelper helper, string scriptPath)
{
var scripts = helper.ViewContext.HttpContext.Items["client-script-list"] as Dictionary<string, string> ?? new Dictionary<string, string>();
if (!scripts.ContainsKey(scriptPath))
{
var sb = new StringBuilder();
var scriptTag = new TagBuilder("script");
scriptTag.Attributes.Add("type", "text/javascript");
scriptTag.Attributes.Add("src", scriptPath);
sb.AppendLine(scriptTag.ToString());
scripts.Add(scriptPath, scriptPath);
helper.ViewContext.HttpContext.Items["client-script-list"] = scripts;
return new MvcHtmlString(sb.ToString());
}
return MvcHtmlString.Empty;
}
如果您使用部分视图,则需要参考脚本库
在页面顶部只添加所需的脚本添加喜欢
@Scripts.Render("~/bundles/jquery")
然后body标签底部添加
@RenderSection("scripts", required: false)
任何其他页面扩展脚本部分,如
@section scripts{
<script src="/Scripts/jquery.validation.js" type="text/javascript"></script>
}