我有一个带有@RenderSection("scripts")
部分的布局,我有一个需要包含在部分视图中的部分。我认为在视图中执行此操作会起作用,但它不会渲染脚本。
@section scripts {
@Scripts.Render("~/bundles/myBundle")
}
在我看来,如何将一个包添加到脚本部分?
布局
@Scripts.Render("~/bundles/jquery", "~/bundles/scripts")
@RenderSection("scripts", required: false)
查看
@section scripts {
@Scripts.Render("~/bundles/movie")
}
答案 0 :(得分:36)
在查看中尝试下面提到的解决方案。
查看
@section Scripts{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/movie")"></script>
}
答案 1 :(得分:16)
为什么要将渲染与捆绑混合使用?如果您选择沿着捆绑的路线,您可以简单地将您的脚本放在.JS文件中,如果您愿意,可以将它放在自己的捆绑包中,并在您的视图上调用该捆绑包。例如:
bundles.Add(new ScriptBundle("~/bundles/myscripts").Include(
"~/Scripts/myscript1.js",
"~/Scripts/myscript2.js"));
然后视图将具有以下内容:
@Scripts.Render("~/bundles/myscripts")
还要确保您的Web.config将编译调试设置为false,如下所示:
<compilation debug="false" />
它确保脚本捆绑和缩小。
<强>更新强>
根据评论和我最近的经验,我可以看到为什么我们要将两者结合使用。完美的社区学习案例! :)所以,如果你决定回来进行重构,我会确保没有开头的拼写错误。如果它仍然无效,请告诉我问题是什么,我会相应地更新答案。感谢大家!
答案 2 :(得分:2)
我无法复制您所遇到的问题
@section scripts {
@Scripts.Render("~/bundles/movie")
}
呈现罚款没有问题(并尊重调试标志) 我同意@Mrchref并重新审视你的路径
另一方面,你可以使用这样的东西:
public static class Helpers
{
public static HtmlString StaticContent(this System.Web.Mvc.UrlHelper url, string contentPath)
{
return new HtmlString(System.Web.Optimization.Scripts.Render(contentPath).ToString());
}
}
用法:
@section Scripts{
@Url.StaticContent("~/assets/js/jquery")
}
我建议不要按原样使用它,
您需要为System.Web.Optimization.Scripts.Render(contentPath).ToString()
找到另一种解决方案,因为它基本上呈现了您正在使用的相同功能(并且不起作用)。
您应该使用System.Web.Optimization.BundleTable.Bundles
,看看是否可以查询这两个版本,检查调试标记,并提供正确的内容。
答案 3 :(得分:1)
我相信新版本可以解决您的问题。如果没有,请按照以下步骤操作:
第1步:将其添加到BundleConfig.cs
bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/common.js"));
第2步:在view/layout
@Scripts.Render("~/bundles/common")
第3步:构建项目并运行它。