36

我有一个包含一个部分的布局,并且我有一个捆绑包,对于某些视图@RenderSection("scripts")需要包含在此部分中。我认为仅在视图中执行此操作会起作用,但它不会渲染脚本。

@section scripts {
    @Scripts.Render("~/bundles/myBundle")  
}

在我看来,我怎样才能在脚本部分包含一个包?

布局

@Scripts.Render("~/bundles/jquery", "~/bundles/scripts")
@RenderSection("scripts", required: false)

看法

@section scripts {
    @Scripts.Render("~/bundles/movie")  
}
4

4 回答 4

38

在View中尝试下面提到的解决方案。

看法

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/movie")"></script>
}
于 2012-12-01T16:46:30.717 回答
20

为什么要将渲染部分与捆绑混合?如果您选择捆绑的路线,您可以简单地将您的脚本放在 .JS 文件中,如果您愿意,可以将其放入自己的包中,然后在您的视图中调用该包。例如:

     bundles.Add(new ScriptBundle("~/bundles/myscripts").Include(
                    "~/Scripts/myscript1.js",
                    "~/Scripts/myscript2.js")); 

然后视图将具有以下内容:

    @Scripts.Render("~/bundles/myscripts")   

还要确保您的 Web.config 已将编译调试设置为 false,如下所示:

  <compilation debug="false" />            

它确保脚本被捆绑和缩小。

更新

根据评论和我最近的经验,我可以理解为什么我们要同时使用这两者。社区学习的完美案例!:) 所以,如果你决定回来进行重构,我会确保一开始没有错别字。如果它仍然不起作用,请让我知道问题是什么,我会相应地更新答案。感谢大家!

于 2012-12-01T18:14:35.603 回答
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,看看是否可以查询两个版本,检查调试标志,并提供正确的内容。

于 2015-08-04T19:16:36.270 回答
1

我相信一个新的版本会解决你的问题。如果没有,请按照以下步骤操作:

  • 第 1 步:将其添加到BundleConfig.cs

    bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/common.js"));

  • 第 2 步:将此行添加到您的view/layout

    @Scripts.Render("~/bundles/common")

  • 第 3 步:构建您的项目并运行它。

于 2017-08-01T17:08:01.977 回答