Я безуспешно пытаюсь заставить работать скрипт и стиль в приложении .NET framework 4.8 Webforms с ограниченным успехом.
Я установил пакет NuGet Microsoft.AspNet.Web.Optimization и создал свой класс Bundle Config в соответствии с документацией, и я вызываю RegisterRoutes в Application_Start в 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.
Такое чувство, что я сделал все, что мне нужно было сделать, поскольку это кажется довольно простым, но это просто не работает...
Любые идеи?
Спасибо, Карл
Привет, Рахул, у меня не было. Я только что добавил это, и теперь это наполовину работает... Кажется, что часть стилей работает, но когда она доходит до нижней части страницы и пытается отобразить скрипты, я получаю "Ссылка на объект не установлена на экземпляр объекта " ошибка? Я проверил имя пакета, и оно такое же, как при создании в BundleConfig.
Измените bundles.Add(new ScriptBundle("~/bundles/SiteJS")
на bundles.Add(new Bundle("~/bundles/SiteJS")
и повторите попытку.
Вот оно. Если вы можете добавить это в качестве ответа, я могу проголосовать. Спасибо.
Что касается вашего сценария, вам сначала нужно убедиться, что вы добавили: <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
будет вернуть null
и, следовательно, выдается ошибка. Поэтому, чтобы предотвратить эту ошибку и остановить шаг минимизации при объединении, просто используйте тип Bundle
при добавлении к своим BundleConfig.cs
записям.
Сдача
bundles.Add(new ScriptBundle("~/bundles/SiteJS")
к
bundles.Add(new Bundle("~/bundles/SiteJS")
Вы добавили
<add namespace = "System.Web.Optimization" />
в свой web.config в разделеnamespaces
?