为什么脚本和样式不在 ASP.Net 网络表单(非 MVC)中呈现

Why are Scripts and Styles not rendering in ASP.Net Webforms (NOT MVC)

我尝试在 .NET Framework 4.8 Webforms 应用程序中使用脚本和样式捆绑但未成功,但收效有限。

我已经安装了 Microsoft.AspNet.Web.Optimization NuGet 包并根据文档构建了我的 Bundle Config class,我在 Application_Start 中调用了 RegisterRoutes in global.asax,但是当我尝试让捆绑包呈现在母版页上时,出现错误并且页面无法加载。

在BundlesConfig.cs...

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new StyleBundle("~/bundles/SiteCSS").Include(
            "~/Theme/bootstrap/css/bootstrap.css",
            "~/Theme/fontawesome/css/all.css",
            "~/Theme/site/site.css"
            ));

        bundles.Add(new ScriptBundle("~/bundles/SiteJS")
            .Include(
            "~/Theme/jquery/js/jquery-3.6.0.js",
            "~/Theme/bootstrap/js/bootstrap.js",
            "~/Theme/fontawesome/js/all.js",
            "~/Theme/site/site.js"
            ));//.Transforms.Add(new JsMinify());
    }
}

在global.asax...

protected void Application_Start(object sender, EventArgs e)
{
    BundleTable.EnableOptimizations = true;
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

但是当我在站点母版页中添加以下内容时...

<asp:PlaceHolder runat="server">
    <%: Styles.Render("~/bundles/SiteCss") %>
</asp:PlaceHolder>

<asp:PlaceHolder runat="server">
    <%: Scripts.Render("~/bundles/SiteJS") %>
</asp:PlaceHolder>

我收到错误...

CS0103: The name 'Styles' does not exist in the current context.

CS0103: The name 'Scripts' does not exist in the current context.

感觉我已经完成了我需要做的所有事情,因为它看起来相当简单,但它就是行不通...

有什么想法吗?

谢谢, 卡尔

关于您的方案,您首先需要确保已添加: <add namespace="System.Web.Optimization" /> 在 web.config 的 namespaces 部分下。这将处理上下文错误,并且您的 ScriptsStyles 将可用于 View.

其次,关于 Object reference not set to an instance of an object 错误,您需要将 ScriptBundle 更改为 Bundle 因为 ScriptBundle 调用了一个压缩器,如果其中有任何问题过程(比如脚本已经缩小,缩小过程中出现一些错误等)然后 ScriptBundle 将 return null 因此抛出错误。因此,为防止此错误并停止捆绑中的缩小步骤,只需在添加到 BundleConfig.cs 条目时使用 Bundle 类型即可。

改变

bundles.Add(new ScriptBundle("~/bundles/SiteJS")

bundles.Add(new Bundle("~/bundles/SiteJS")