Расширения Razor HtmlHelper (или другие пространства имен для представлений) не найдены - PullRequest
166 голосов
/ 09 ноября 2010

Не знаю, если это происходило в PR или бета-версии, но если я создаю метод расширения на 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

Ответы [ 8 ]

272 голосов
/ 09 ноября 2010

Начиная с бета-версии, 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 , чтобы автоматически убедиться, что у вас есть нужные значения конфигурации.1009 * Обратите внимание , что вам может потребоваться закрыть и снова открыть файл для изменений, которые будут приняты редактором.

11 голосов
/ 14 декабря 2011

Как следует из принятого ответа, вы можете добавить "использование" ко всем представлениям, добавив в раздел файл конфигурации.

Но для одного просмотра вы можете просто использовать

@ с использованием SomeNamespace.Extensions

5 голосов
/ 21 января 2016

У меня была эта проблема в VS 2015. Следующие проблемы решили ее для меня:

Найдите "webpages: Version" в настройках приложения и обновите до версии 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 голосов
/ 30 мая 2014

У меня была такая же ошибка в приложении MVC 4 с использованием Razor. В попытке очистить файлы web.config я удалил два значения конфигурации webpages::

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />

Как только я восстановлю эти значения конфигурации, страницы будут правильно скомпилированы, и ошибки, связанные с методом расширения .Partial(), исчезнут.

3 голосов
/ 06 июня 2012

Я обнаружил, что размещение этого раздела в моем файле 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>
1 голос
/ 07 марта 2016

Эта ошибка говорит о том, что у вас неправильно связан двигатель вашего проекта.

Решение. В окне обозревателя решений щелкните правой кнопкой мыши свой веб-проект и выберите «Управление пакетами Nuget ...», затем установите «Microsoft ASP.NET Razor».Это обеспечит правильную установку пакета и добавит необходимые записи в ваш файл web.config.

0 голосов
/ 26 января 2015

В моем случае используйте VS 2013, и он не поддерживает MVC 3 изначально (даже вы меняете ./Views/web.config): https://stackoverflow.com/a/28155567/1536197

0 голосов
/ 14 января 2011

Поскольку ASP.NET MVC 3 RTM отсутствует, раздел конфигурации для Razor не требуется. И эти разделы можно безопасно удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...