Как добавить дополнительные пространства имен на страницы Razor вместо объявления @using? - PullRequest
145 голосов
/ 06 октября 2010

Есть ли какая-то магия, которую мне нужно использовать, чтобы получить пространства имен в элементе pages/namespaces в webconfig?

<pages>
    <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>

Выше просто не не хочет работать. Я знаю, что с пространством имен все в порядке, потому что когда я помещаю @using MyCustomHelpers вверху страницы, оно волшебным образом работает.

Это так, чтобы я мог заставить Html.SomeFunction() работать без необходимости ставить @using вверху всех моих страниц

Ответы [ 5 ]

162 голосов
/ 07 октября 2010

Обновление : посмотрите мой обновленный ответ, относящийся к MVC 3 RC: Расширения Razor HtmlHelper (или другие пространства имен для представлений) Не найдено

Это изменилось между MVC 3 Preview 1 и MVC 3 Beta (выпущено только сегодня). В Preview 1 Razor использовал раздел конфигурации пространств имен WebForms. Однако в бета-версии есть новый раздел конфигурации, который отделен от WebForms. Вам нужно будет добавить следующее в ваш файл 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>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyCustomHelpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

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

Обратите внимание, что есть другие изменения в том, что требуется в web.config для работы Razor в MVC3 Beta, поэтому вам лучше всего взглянуть на файл ~\View\Web.config, который поставляется в шаблонах проектов Beta.

50 голосов
/ 06 октября 2010

Если вы поместите декларацию пространства имен в Web.config в корневой папке «Views» и / или в папке «Views» текущей области (в зависимости от того, где находится ваше представление) - оно должно работать должным образом.

6 голосов
/ 27 апреля 2011

Я нашел это http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx, в котором объясняется, как добавить пользовательское пространство имен для всех ваших страниц бритвы.

В основном вы можете сделать это

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

и поместите следующий код в файл AssemblyInfo.cs

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

метод InitializeApplication будет выполнен перед Application_Start в global.asax

4 голосов
/ 12 июля 2013

Для чего стоит, другой метод - просто поместить класс расширения помощника в пространство имен System, которое по умолчанию уже включено механизмом представления.Например:

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

Таким образом, пока есть ссылка на библиотеку, содержащую класс, все это увидит.Поскольку вы расширяете класс System.Web.Mvc, кажется разумно разместить методы расширения в одном и том же пространстве имен.

0 голосов
/ 13 октября 2016

Попробуйте закрыть и снова открыть представление, убедившись, что были внесены изменения в файл web.config в корне представления.

Закрытие и повторное открытие исправили мою проблему.

См. Здесь:

Проблема пространства имен ASP.NET MVC 4 в виде бритвы

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