Не знаю, произошло ли это в PR или Beta, но если я создам метод расширения на HtmlHelper
, он не будет распознан на странице с поддержкой Razor:
namespace SomeNamespace.Extensions {
public static class HtmlExtensions {
public static string Foo(this HtmlHelper html) {
return "Foo";
}
}
}
Я добавил его в раздел <Namespaces>
в Web.config
:
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<!-- snip -->
<add namespace="SomeNamespace.Extensions"/>
</namespaces>
</pages>
Но при попытке просмотра страницы она выдает ошибку компиляции:
@Html.Foo()
Если я заново создаю страницу с WebForms, она отлично работает. Какая сделка?
Обход
Если я включаю @using SomeNamespace.Extensions
в свой вид Razor, то он работает, но я бы скорее просто его в Web.config
Ответ 1
Начиная с бета-версии, Razor использует другой раздел конфигурации для глобального определения импорта пространства имен. В вашем файле Views\Web.config
вы должны добавить следующее:
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Routing" />
<!-- Your namespace here -->
</namespaces>
</pages>
</system.web.webPages.razor>
Используйте средство обновления MVC 3, чтобы автоматически убедиться, что у вас есть правильные значения конфигурации.
Примечание, что вам может понадобиться закрыть и снова открыть файл для изменений, которые будут выбраны редактором.
Ответ 2
В качестве принятого ответа вы можете добавить "использование" ко всем представлениям, добавив в раздел конфигурационного файла.
Но для одного вида вы можете просто использовать
@using SomeNamespace.Extensions
Ответ 3
У меня была такая же ошибка в приложении MVC 4 с использованием Razor. В попытке очистить файлы web.config я удалил два значения конфигурации webpages:
:
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
Как только я восстановил эти значения конфигурации, страницы будут правильно скомпилированы и ошибки в отношении метода расширения .Partial()
исчезнут.
Ответ 4
У меня была эта проблема в VS 2015.
Для меня это решено:
Найдите "веб-страницы: Версия" в настройках приложения и обновите его до версии 3.0.0.0. У моего web.config был
<add key="webpages:Version" value="2.0.0.0" />
и я обновил его до
<add key="webpages:Version" value="3.0.0.0" />
Ответ 5
Я обнаружил, что этот раздел в моем web.config для каждой папки просмотра разрешил его.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Ответ 6
Эта ошибка говорит вам, что у вас нет механизма бритвы, который правильно связан с вашим проектом.
Решение. В окне обозревателя решений щелкните правой кнопкой мыши на своем веб-проекте и выберите "Управление пакетами Nuget...", затем установите "Microsoft ASP.NET Razor". Это позволит убедиться, что правильно установлен пакет, и он добавит необходимые записи в ваш файл web.config.
Ответ 7
В моем случае используйте VS 2013, и он не поддерживает MVC 3 изначально (даже вы меняете. /Views/web.config): fooobar.com/questions/12991/...
Ответ 8
Так как RTM ASP.NET MVC 3 отсутствует, нет необходимости в разделе конфигурации для Razor. И эти разделы можно безопасно удалить.