Як імпортувати простір імен на сторінку перегляду Razor?


Відповіді:


852

Нарешті знайшов відповідь.

@using MyNamespace

Для VB.Net:

@Imports Mynamespace

Подивіться на відповідь @ravy amiry, якщо ви хочете включити у програму простір імен.


4
Також: Вони не можуть входити в кодові блоки. (Ви отримаєте помилку під час виконання)
Dan Esparza

5
Також вам не потрібна крапка з комою.
RPM1984

5
Це просто погана практика. Будь ласка, не додайте це вгорі сторінок бритви. Це безладно і т. Д. ... Правильним способом є додавання до Views - web.config так, як вказує @Javad_Amiry.
Том Стікель

21
Це не погана практика. Це абсолютно необхідна функція. web.config - це як глобальний оператор, який використовує простір імен на ВСІХ ваших сторінках. Це може бути не тим, що ви хочете, якщо у вас є класи з однаковою назвою в різних просторах імен. У вас все ще виникне конфлікт, якщо ви спробуєте використовувати їх в одному файлі, але ви зможете вирішити це легко в одному файлі. Якщо вставити його в web.config, конфлікт виникне на всіх ваших сторінках, які використовують будь-який із класів. Тож називати цю погану практику взагалі немає сенсу.
Трайнко

4
Я здивований, що Intellisense не натякає на додавання використовуючого оператора так само, як це робиться на звичайних C # сторінках.
Трайнко

397

Перший спосіб полягає у використанні @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нижче", /Areas/<AreaName>/Views/а не "" /Views/


10
@vtortola: який web.config? файл web.config у папці Views, а не головний web.config у кореневій папці. добре?
ravy amiry

9
Хочеться сподіватися, що врятуєте когось на кілька хвилин, витягнувши волосся, і скажіть, що якщо ви працюєте в певній місцевості, ви повинні додати простір імен у веб.config під / Області / <AreaName> Перегляди /, а не / Перегляди /.
Нік Сільберштейн

11
@MatthijsWessels Ні, це не потрібно перезапускати VS. Просто побудуйте проект, і він набере чинності. Принаймні, я роблю це завжди. Якщо представлення відкрите, його потрібно закрити перед тим, як створити його, і знову відкрити його після складання.
ravy amiry

2
@Javad_Amiry, ага, я перестроїв, але перегляд не закрив.
Маттайс Весселс

1
Так, це правильний шлях. Не твердження "Використання" вгорі сторінки "Бритви", як у вибраній відповіді "ОП" ....
Том Стікель,

30

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

@using MyNamespace

Для моделі

@model MyModel

1
Чому немає; в кінці?
FrenkyB

2
@FrenkyB, оскільки це не C # код, це код Razor. На usingпочатку .cs-файла - це ключове слово компілятора C #. Файл @using.cshtml на початку .cshtml - це підказка для двигуна шаблонів Razor.
Марк

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
Герман

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


4
Це насправді досить хороша відповідь, але місце розташування Microsoft.WebPages.Compilation.AddGlobalImportбуло змінено на System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu

2
Велика перевага використання цього методу пов’язана з тим, що простір імен буде доступний у всіх представленнях (у тому числі в межах областей), а також оголошується лише в одному місці.
jahu

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>  
   }


3

"використання MyNamespace" працює в MVC3 RTM. Сподіваюсь, це допомагає.


2

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

@using XX.YY.ZZ

0

Залежно від ваших потреб, ви можете скористатися одним із наступних методів:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.