为什么脚本和样式不在 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
部分下。这将处理上下文错误,并且您的 Scripts
和 Styles
将可用于 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")
我尝试在 .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
部分下。这将处理上下文错误,并且您的 Scripts
和 Styles
将可用于 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")