Почему компилятор не находит моих бритвенных помощников в теме Orchard?

Я хотел бы поделиться среди представлений логикой создания тега img из mediaPart. Я уже создал следующий метод бритвы helper:

@helper CreateImgFromMediaPart(dynamic mediaPart, int width = 150)
{
    var imgSrc = mediaPart != null ? mediaPart.MediaUrl : string.Empty;
    var imgAlt = mediaPart != null ? mediaPart.AlternateText : string.Empty;
    <img alt="@imgAlt" src="@imgSrc" />
}

Я попробовал это, создав папку App_Code, поместив в нее файл MyHelpers.cshtml и поместив в этот файл указанный выше вспомогательный метод. К сожалению, мы получаем следующую ошибку:

Имя «MyHelpers» не существует в текущем контексте.


person Shaun Luttin    schedule 22.08.2014    source источник


Ответы (2)


Вы добавили ссылку на dll в файл web.config в папке представлений? Это то, что используется для разрешения специфичных для бритвы помощников/определений.

person Mike Beeler    schedule 22.08.2014

Ответ Майка Билера сработал. Это файл web.config, который я добавил в папку Views.

<configuration>
  <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>
        <!-- This is the key line -->
        <add namespace="MyBase.Namespace.Extensions" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
</configuration>
person Shaun Luttin    schedule 22.08.2014
comment
Откуда пространство имен MyBase.Namespace.Extensions? Это пространство имен, в котором находится помощник бритвы? Насколько я знаю, вы не можете поместить бритвенные представления в пространства имен, в отличие от кодов С#, не так ли? Или, может быть, MyBase.Namespace.Extensions название проекта? - person Twisted Whisper; 01.02.2016