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

Ответы:

852

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

@using MyNamespace

Для VB.Net:

@Imports Mynamespace

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

Амитабх
источник
4
Также: они не могут идти в блоках кода. (Вы получите ошибку во время выполнения)
Дэн Эспарза
5
Также вам не нужна точка с запятой.
RPM1984
5
Это просто период плохой практики. Пожалуйста, не добавляйте это в начало своих бритвенных страниц. Это грязно и т. Д. Правильный способ - добавить в Views - web.config, как указывает @Javad_Amiry.
Том Стиккель
21
Это не плохая практика. Это абсолютно необходимая функция. web.config похож на глобальный оператор using, который делает пространство имен активным во всех ваших страницах. Это может быть не то, что вам нужно, если у вас есть классы с одинаковыми именами в разных пространствах имен. У вас все равно будет конфликт, если вы попытаетесь использовать их в одном и том же файле, но вы можете легко разрешить его в одном файле. Если вы добавите его в файл web.config, конфликт будет возникать на всех ваших страницах, которые используют любой из классов. Поэтому называть эту плохую практику не имеет никакого смысла.
Трийнко
4
Я удивлен, что Intellisense не намекает на добавление оператора using так же, как на обычных страницах C #.
Трийнко
397

Первый способ заключается в том, что @usingоператор use в .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.configUnder , /Areas/<AreaName>/Views/а не /Views/

Рави Амиры
источник
10
@vtortola: какой web.config? файл web.config в папке Views, а не основной файл web.config в корневой папке. ОК?
ravy amiry
9
Я хотел бы, надеюсь, сэкономить кому-то несколько минут на то, чтобы выдернуть ему волосы, и сказать, что если вы работаете в области, вы должны добавить пространство имен в файле Web.config в / Areas / <AreaName> Views / вместо / / Взгляды/.
Ник Зильберштейн
11
@MatthijsWessels Нет, не нужно перезагружать VS. Просто создайте проект, и он вступит в силу. По крайней мере, я делаю это всегда. Если представление открыто, вы должны закрыть это представление перед сборкой и повторно открыть его после сборки.
ravy amiry
2
@Javad_Amiry, ага, я восстановил, но не закрыл вид.
Маттис Вессельс
1
Да, это правильный путь. Не утверждение «Использование» в верхней части страницы Razor, как в ответе, выбранном OP.
Том Стиккель
30

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

@using MyNamespace

Для модели

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

В 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
Germán
16

Я нашел этот 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

к-DEV
источник
4
На самом деле это довольно хороший ответ, но местоположение Microsoft.WebPages.Compilation.AddGlobalImportбыло изменено на System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
Джаху
2
Большим преимуществом использования этого метода является тот факт, что пространство имен можно будет использовать во всех представлениях (в том числе в областях) при объявлении в одном месте.
Джаху
14

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


источник
11

Для пространства имен и библиотеки

@using NameSpace_Name

Для модели

@model Application_Name.Models.Model_Name 

Для повторения списка на странице Razor (Вы должны использовать цикл foreach для доступа к элементам списка)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }
Вир Джангид
источник
10

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

@using MyNamespace
Абхишек Сиддху
источник
3

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

Говард
источник
2

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

@using XX.YY.ZZ
HiteshAjudiya
источник
0

В зависимости от ваших потребностей вы можете использовать один из следующих методов:

Имран Джавед
источник