如何在视图中的脚本部分中包含脚本包

时间:2012-12-01 15:30:09

标签: asp.net-mvc asp.net-mvc-4

我有一个带有@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 个答案:

答案 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步:构建项目并运行它。