Почему команды @Scripts и @Styles не распознаются в файле макета MVC4 Razor?
Следующий файл макета MVC4 Razor загружает несколько пакетов script и css, созданных в Bundle.config.
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<title>XXX Beta</title>
@Scripts.Render(
"~/bundles/bundle_jquery",
"~/bundles/bundle_modernizr",
"~/bundles/bundle_foundation",
"~/bundles/bundle_jhs")
@Styles.Render(
"~/Content/bundle_foundation",
"~/Content/bundle_jhs")
@RenderSection("pageHeadContent", false)
</head>
<body>
<div id="bodyContainer">
@Html.Partial("Partial/_header")
<div id="contentContainer">
<div id="mainContentContainer">
<div id="sidebarContainer">
@RenderSection("sidebarContent", required: true)
</div>
@RenderBody()
</div>
<div class="clearBoth">
</div>
</div>
@Html.Partial("Partial/_footer")
</div>
</body>
</html>
Когда страница отображается, возникает следующая ошибка. По некоторым причинам команды @Scripts и @Styles не распознаются. Если я набираю "@Scripts" в файлах, Intellisense не отображает/не показывает команду. Проект ссылается на System.Web.Optimization, который используется в Bundle.config.
Что может быть причиной того, что команды @Scripts и @Styles не распознаются?
Ошибка сервера в приложении "/".
Ошибка компиляции
Описание. Произошла ошибка во время компиляции ресурса, необходимого для обслуживания этого запроса. Ознакомьтесь с приведенными ниже конкретными данными об ошибках и соответствующим образом измените исходный код.
Сообщение об ошибке компилятора: CS0103: имя "Сценарии" не существует в текущем контексте
Ошибка источника:
Строка 4:
Строка 5: XXX Бета
Строка 6: @Scripts.Render(
Строка 7: "~/bundles/bundle_jquery",
Строка 8: "~/bundles/bundle_modernizr",
Исходный файл: c:\Users\username\Documents\Visual Studio 2010\Projects\XXX\Solution\xxx.website\Views\Shared_sidebarLayout.cshtml Строка: 6
Показать подробный вывод компилятора:
Показать полный источник компиляции:
Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.272
Ответы
Ответ 1
Убедитесь, что сборка System.Web.Optimization.dll
указана в вашем проекте и что пространство имен <add namespace="System.Web.Optimization"/>
было добавлено в ваш файл ~/Views/web.config
(не ~/web.config
):
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
Сборка System.Web.Optimization.dll
содержится в Microsoft.AspNet.Web.Optimization
NuGet, поэтому убедитесь, что она установлена в вашем проекте (при создании новый проект ASP.NET MVC 4 в Visual Studio с использованием интернет-шаблона, этот NuGet автоматически добавляется в проект).
Ответ 2
Если вы используете пакеты (как в соответствующем примере), вам также может потребоваться добавить конфигурацию пакета в ваше приложение:
Добавить Bundle Config в папку App_Start:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate.js",
"~/Scripts/jquery.validate.unobtrusive.js"
));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/YourStyles.css"));
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
}
}
Добавьте следующую строку в свой файл Global.asax.cs
BundleConfig.RegisterBundles(BundleTable.Bundles);
Ответ 3
В моем случае мне пришлось изменить целевую структуру проекта с 4.5 до 4.5.1.
Ответ 4
В вашем проекте есть два файла webconfig... оба из них должны иметь
<add namespace="System.Web.Optimization"/>
Ответ 5
Как указано здесь:
-
откройте папку: Пользователи\(пользователь)\AppData\Local\Microsoft\VisualStudio (версия)
-
удалить папку: ComponentModelCache
-
перезапустить Visual Studio (ComponentModelCache воссоздается и проблема исчезает)
Ответ 6
Я нашел ответ здесь введите ссылку здесь
видимо вам нужно добавить web.optimization из корневого web.config.
Ответ 7
1. Убедитесь, что dll System.Web.Optimization перепроектирован в ссылках проекта. если нет, установите его с помощью NuGet (Консоль диспетчера пакетов):
Install-Package Microsoft.AspNet.Web.Optimization
2. Добавьте пространство имен System.Web.Optimization в файл "Views" web.config:
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Optimization"/>
</namespaces>
</pages>
</system.web.webPages.razor>
3. Если проблема не устранена, попробуйте закрыть/повторно открыть Visual Studio, чтобы обновить кэш.