Как импортировать пространство имен на странице просмотра Razor?

637

Как импортировать пространство имен на странице просмотра Razor?

Теги:
razor
asp.net-mvc-3
webmatrix

9 ответов

770
Лучший ответ

Наконец нашел ответ.

@using MyNamespace

Для VB.Net:

@Imports Mynamespace

Посмотрите на @Javad_Amiry ответ, если вы хотите включить пространство имен в приложение.

  • 3
    Также: они не могут идти в блоках кода. (Вы получите ошибку во время выполнения)
  • 5
    Также вам не нужна точка с запятой.
Показать ещё 6 комментариев
362

Первый способ - использовать оператор @using в файлах .cshtml, который импортирует пространство имен только в текущий файл, а второй:

В файле "web.config" в каталоге "Views" вашего проекта (обратите внимание, что это не основной файл web.config в корне проекта), найдите этот раздел:

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      .
      .
      <!-- etc -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

вы можете добавить свое собственное пространство имен так:

<add namespace="My.Custom" />

который добавит пространство имен ко всем файлам .cshtml(и/или .vbhtml); также вы можете изменить наследование видов отсюда, например:

<pages pageBaseType="My.Custom.MyWebViewPage">

С уважением.


ОБНОВЛЕНИЕ: Благодаря @ Nick Silberstein к его напоминанию о местах! Он сказал:

Если вы работаете в области, вы должны добавить namespace в Web.config в <<29 > , а не /Views/

  • 0
    У меня нет этого раздела в моем web.config, я должен добавить его?
  • 10
    @vtortola: какой web.config? файл web.config в папке Views, а не основной файл web.config в корневой папке. ОК?
Показать ещё 8 комментариев
26

В ASP.NET MVC 3 Preview1 вы можете импортировать пространство имен во всех ваших представлениях бритвы с помощью этого кода в Global.asax.cs

Microsoft.WebPages.Compilation.CodeGeneratorSettings.AddGlobalImport("Namespace.Namespace");

Я надеюсь, что в RTM это будет сделано через раздел Web.config.

  • 6
    В RTM будет раздел web.config, но мы также хотели предоставить API для этого, потому что многие пользователи начинают отвлекаться от конфигурации. Таким образом, у нас есть оба варианта для вас!
  • 6
    Начиная с ASP.NET MVC 3 Beta этот метод больше не работает. Существует новый раздел web.config, как описано здесь stackoverflow.com/questions/3875207/… . Метод AddGlobalImport для импорта глобального пространства имен для всех представлений был перемещен в этот класс System.Web.WebPages.Razor.WebPagesRazorHost
23

Для библиотеки

@using MyNamespace

Для модели

@model MyModel
  • 1
    Почему нет; в конце?
  • 2
    @FrenkyB, потому что это не код C #, а код Razor. using в начале файла .cs является ключевым словом компилятора C #. @using в начале файла .cshtml является подсказкой для механизма шаблонов Razor.
15

Я нашел этот 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
    На самом деле это довольно хороший ответ, но местоположение Microsoft.WebPages.Compilation.AddGlobalImport было изменено на System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport .
  • 2
    Большим преимуществом использования этого метода является тот факт, что пространство имен можно будет использовать во всех представлениях (в том числе в областях) при объявлении в одном месте.
Показать ещё 1 комментарий
12

Одна из проблем, которую вы должны знать, заключается в том, что при импорте пространства имен через web.config в папку Views, namespace импортируется JUST для представлений в этой папке. Если вы хотите импортировать namespace в представлениях области, вы также должны импортировать этот namespace в этом файле web.config, расположенном в папке Views;

  • 0
    Интересный момент здесь!
3

Вы можете попробовать это

@using MyNamespace
3

"использование MyNamespace" работает в RTM MVC3. Надеюсь, это поможет.

2

Я думаю, что для импорта пространства имен в режиме бритвы вам просто нужно добавить ниже:

@using XX.YY.ZZ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню