Jak zaimportować przestrzeń nazw na stronie Razor View?

Odpowiedzi:

852

W końcu znalazłem odpowiedź.

@using MyNamespace

W przypadku VB.Net:

@Imports Mynamespace

Spójrz na odpowiedź @ravy Amiry, jeśli chcesz dołączyć przestrzeń nazw w aplikacji.

Amitabh
źródło
4
Ponadto: nie mogą wchodzić w bloki kodu. (Otrzymasz błąd czasu wykonywania)
Dan Esparza
5
Również nie potrzebujesz średnika.
RPM1984,
5
To tylko zły okres praktyki. Nie dodawaj tego na górze stron maszynki do golenia. Jest to bałagan itp. Prawidłowym sposobem jest dodanie do Widoku - web.config, tak jak wskazuje @Javad_Amiry.
Tom Stickel,
21
To nie jest zła praktyka. Jest to absolutnie niezbędna funkcja. web.config jest jak globalna instrukcja using, która sprawia, że ​​przestrzeń nazw jest aktywna na WSZYSTKICH stronach. To może nie być to, czego potrzebujesz, jeśli masz klasy o tej samej nazwie w różnych przestrzeniach nazw. Nadal będziesz mieć konflikt, jeśli spróbujesz użyć ich w tym samym pliku, ale możesz to łatwo rozwiązać w jednym pliku. Jeśli umieścisz go w pliku web.config, konflikt pojawi się na wszystkich stronach korzystających z jednej z klas. Tak więc nazywanie tej złej praktyki nie ma żadnego sensu.
Triynko
4
Dziwi mnie, że Intellisense nie sugeruje dodawania instrukcji using w taki sam sposób, jak na zwykłych stronach w języku C #.
Triynko
397

Pierwszym sposobem jest użycie @usinginstrukcji w .cshtmlplikach, która importuje przestrzeń nazw tylko do bieżącego pliku, a drugą:

W pliku „web.config” w Viewskatalogu „ ” twojego projektu (zauważ, że nie jest to główny plik web.config w katalogu głównym projektu) , znajdź tę sekcję:

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

możesz dodać niestandardową przestrzeń nazw w ten sposób:

<add namespace="My.Custom" />

to doda przestrzeń nazw do wszystkich plików .cshtml (i / lub .vbhtml); możesz także zmienić dziedziczenie widoków stąd, na przykład:

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

Pozdrowienia.


AKTUALIZACJA: Dzięki @ Nick Silbersteindo jego przypomnienia o obszarach! Powiedział:

Jeśli pracujesz w obrębie obszaru , należy dodać namespacew Web.configniedostatecznie /Areas/<AreaName>/Views/zamiast /Views/

ravy amiry
źródło
10
@vtortola: który web.config? plik web.config w folderze Views, a nie główny plik web.config w folderze głównym. ok?
ravy amiry
9
Mam nadzieję, że ocalę komuś kilka minut na wyciągnięcie włosów i powiem, że jeśli pracujesz w danym obszarze, musisz dodać przestrzeń nazw w pliku Web.config w obszarze / Obszary / <Nazwa_urowa> Widoki / zamiast / Wyświetlenia/.
Nick Silberstein,
11
@MatthijsWessels Nie, nie trzeba restartować VS. Po prostu zbuduj projekt, a zacznie obowiązywać. Przynajmniej robię to zawsze. Jeśli widok jest otwarty, musisz go zamknąć przed kompilacją i ponownie otworzyć po kompilacji.
ravy amiry 28.12.12
2
@Javad_Amiry, aha, odbudowałem, ale nie zamknąłem widoku.
Matthijs Wessels
1
Tak, to jest właściwy sposób. Nie oświadczenie Korzystanie na górze strony Razor, jak w odpowiedzi wybranej przez PO ...
Tom Stickel
30

Do biblioteki

@using MyNamespace

Do modelu

@model MyModel
Alper Şaldırak
źródło
1
Dlaczego nie ma; na końcu?
FrenkyB,
2
@FrenkyB, ponieważ nie jest to kod C #, to kod Razor. Na usingpoczątku pliku .cs znajduje się słowo kluczowe kompilatora C #. @usingNa początku pliku .cshtml to aluzja do szablonu silnika Razor.
Mark
27

W ASP.NET MVC 3 Preview1 możesz zaimportować przestrzeń nazw do wszystkich widoków maszynki do golenia za pomocą tego kodu w Global.asax.cs

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

Mam nadzieję, że w RTM odbywa się to poprzez sekcję Web.config.

Niemiecki
źródło
6
W RTM będzie sekcja web.config, ale chcieliśmy również zapewnić API, aby to zrobić, ponieważ wielu użytkowników zaczyna odchodzić od konfiguracji. Mamy więc dla ciebie obie opcje!
Andrew Stanton-Nurse
6
Od wersji ASP.NET MVC 3 Beta ta metoda już nie działa. Istnieje nowa sekcja web.config, jak wyjaśniono tutaj stackoverflow.com/questions/3875207/… . Metodę AddGlobalImport do importowania globalnej przestrzeni nazw do wszystkich widoków przeniesiono do tej klasy System.Web.WebPages.Razor.WebPagesRazorHost
Germán
16

Znalazłem ten http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx, który wyjaśnia, jak dodać niestandardową przestrzeń nazw do wszystkich stron maszynki do golenia.

Zasadniczo możesz to zrobić

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

i umieść następujący kod w pliku AssemblyInfo.cs

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

metoda InitializeApplication zostanie wykonana przed Application_Start w global.asax

k-dev
źródło
4
To właściwie dobra odpowiedź, ale zmieniono lokalizację Microsoft.WebPages.Compilation.AddGlobalImportna System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu
2
Duża zaleta korzystania z tej metody wynika z faktu, że przestrzeń nazw będzie użyteczna we wszystkich widokach (w tym w obszarach), a deklarowana będzie tylko w jednym miejscu.
jahu
14

Jedną z kwestii, które trzeba wiedzieć, jest to, że podczas importowania nazw poprzez web.configw Viewsfolderze, który namespacejest importowany WŁAŚNIE dla widoków w tym folderze . Znaczy, jeśli chcesz zaimportować namespaceW widoków obszaru , należy również importować, że namespacew tym obszarze w web.configpliku, znajduje się w centrum w Viewsfolderze;


źródło
11

Dla przestrzeni nazw i biblioteki

@using NameSpace_Name

Do modelu

@model Application_Name.Models.Model_Name 

Do iteracji listy na stronie Razor (musisz użyć pętli foreach, aby uzyskać dostęp do elementów listy)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }
Veer Jangid
źródło
10

Możesz tego spróbować

@using MyNamespace
Abhishek Siddhu
źródło
3

„korzystanie z MyNamespace” działa w MVC3 RTM. Mam nadzieję że to pomoże.

Howard
źródło
2

Myślę, że aby zaimportować przestrzeń nazw w widoku brzytwy, wystarczy dodać poniżej sposób:

@using XX.YY.ZZ
HiteshAjudiya
źródło
0

W zależności od potrzeb możesz użyć jednej z następujących metod:

Imran Javed
źródło