Wie importiere ich einen Namespace in die Razor View-Seite?

Antworten:

852

Endlich die Antwort gefunden.

@using MyNamespace

Für VB.Net:

@Imports Mynamespace

Werfen Sie einen Blick auf @ravy Amiry Antwort , wenn Sie einen Namespace über die App enthalten sein sollen.

Amitabh
quelle
4
Außerdem: Sie können nicht in Codeblöcke gehen. (Sie erhalten einen Laufzeitfehler)
Dan Esparza
5
Auch brauchen Sie das Semikolon nicht.
RPM1984
5
Dies ist nur eine schlechte Übungszeit. Bitte fügen Sie dies nicht oben auf Ihren Rasiererseiten hinzu. Dies ist chaotisch usw. Der richtige Weg ist, Views - web.config hinzuzufügen, genau wie @Javad_Amiry darauf hinweist.
Tom Stickel
21
Es ist keine schlechte Praxis. Es ist eine absolut notwendige Funktion. web.config ist wie eine globale using-Anweisung, die den Namespace in ALLEN Ihren Seiten aktiviert. Dies ist möglicherweise nicht das, was Sie möchten, wenn Sie Klassen mit demselben Namen in verschiedenen Namespaces haben. Sie haben immer noch einen Konflikt, wenn Sie versuchen, sie in derselben Datei zu verwenden, aber Sie können diesen einfach in einer einzelnen Datei lösen. Wenn Sie es in web.config einfügen, tritt der Konflikt auf allen Ihren Seiten auf, die eine der Klassen verwenden. Diese schlechte Praxis zu nennen macht also überhaupt keinen Sinn.
Triynko
4
Ich bin überrascht, dass Intellisense nicht andeutet, die using-Anweisung wie auf normalen C # -Seiten hinzuzufügen.
Triynko
397

Der erste Weg ist die @usingAnweisung use in .cshtmlDateien, die einen Namespace nur in die aktuelle Datei importiert, und der zweite:

Suchen Sie in der Datei "web.config" im ViewsVerzeichnis " " Ihres Projekts (beachten Sie, dass es sich nicht um die Hauptdatei web.config im Stammverzeichnis des Projekts handelt) diesen Abschnitt:

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

Sie können Ihren benutzerdefinierten Namespace folgendermaßen hinzufügen:

<add namespace="My.Custom" />

Dadurch wird der Namespace allen .cshtml- (und / oder .vbhtml-) Dateien hinzugefügt. Außerdem können Sie von hier aus die Vererbung von Ansichten ändern, z.

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

Grüße.


UPDATE: Danke an @ Nick Silbersteinan seine Erinnerung an Gebiete! Er sagte:

Wenn Sie in einem Bereich arbeiten , müssen Sie namespaceden Bereich Web.configunter /Areas/<AreaName>/Views/und nicht hinzufügen/Views/

ravy amiry
quelle
10
@vtortola: welche web.config? Die Datei web.config im Ordner Ansichten, nicht die Hauptdatei web.config im Stammordner. in Ordnung?
Ravy Amyy
9
Ich möchte hoffentlich jemandem ein paar Minuten Zeit sparen, um ihm die Haare auszureißen, und sagen, dass Sie, wenn Sie in einem Bereich arbeiten, den Namespace in der Web.config unter / Areas / <AreaName> Views / anstatt / hinzufügen müssen Ansichten /.
Nick Silberstein
11
@MatthijsWessels Nein, VS muss nicht neu gestartet werden. Erstellen Sie einfach das Projekt und es wird wirksam. Zumindest mache ich das immer. Wenn eine Ansicht geöffnet ist, müssen Sie diese Ansicht vor dem Erstellen schließen und nach dem Erstellen erneut öffnen.
Ravy Amy
2
@Javad_Amiry, aha, ich habe wieder aufgebaut, aber die Ansicht nicht geschlossen.
Matthijs Wessels
1
Ja, das ist der richtige Weg. Nicht die Using-Anweisung oben auf der Razor-Seite wie in der OP-ausgewählten Antwort ....
Tom Stickel
30

Für die Bibliothek

@using MyNamespace

Für Modell

@model MyModel
Alper Şaldırak
quelle
1
Warum gibt es keine; Am Ende?
FrenkyB
2
@FrenkyB, da dies kein C # -Code ist, sondern Razor-Code. Das usingam Anfang einer .cs-Datei ist ein C # -Compiler-Schlüsselwort. Das @usingam Anfang einer .cshtml-Datei ist ein Hinweis auf die Razor-Template-Engine.
Mark
27

In ASP.NET MVC 3 Preview1 können Sie mit diesem Code in Global.asax.cs einen Namespace in alle Ihre Rasiereransichten importieren

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

Ich hoffe, dass dies in RTM über den Abschnitt Web.config erledigt wird.

Deutsche
quelle
6
Es wird einen Abschnitt web.config in RTM geben, aber wir wollten auch eine API bereitstellen, um dies zu tun, da viele Benutzer beginnen, sich von der Konfiguration abzuwenden. Wir haben also beide Möglichkeiten für Sie!
Andrew Stanton-Krankenschwester
6
Ab ASP.NET MVC 3 Beta funktioniert diese Methode nicht mehr. Es gibt einen neuen Abschnitt web.config, wie hier erläutert . Stackoverflow.com/questions/3875207/… . Die AddGlobalImport-Methode zum Importieren eines globalen Namespace in alle Ansichten wurde in diese Klasse System.Web.WebPages.Razor.WebPagesRazorHost
Germán
16

Ich habe diese http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx gefunden, in der erklärt wird, wie Sie all Ihren Rasiermesserseiten einen benutzerdefinierten Namespace hinzufügen.

Grundsätzlich können Sie dies machen

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

und fügen Sie den folgenden Code in Ihre AssemblyInfo.cs ein

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

Die Methode InitializeApplication wird vor Application_Start in global.asax ausgeführt

k-dev
quelle
4
Dies ist eigentlich eine ziemlich gute Antwort, aber der Ort von Microsoft.WebPages.Compilation.AddGlobalImportwurde in geändert System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
Jahu
2
Der große Vorteil dieser Methode besteht darin, dass der Namespace in allen Ansichten (einschließlich der innerhalb von Bereichen) verwendet werden kann, während er nur an einer Stelle deklariert wird.
Jahu
14

Ein Problem, das Sie kennen müssen, ist, dass beim Importieren eines Namespace über web.configin ViewsOrdner NUR für Ansichten in diesem Ordnernamespace importiert wird . Wenn Sie eine Ansicht in einem Bereich importieren möchten , müssen Sie diese auch in die Datei dieses Bereichs importieren , die sich im Ordner des Bereichs befindet .namespacenamespaceweb.configViews


quelle
11

Für Namespace und Bibliothek

@using NameSpace_Name

Für Modell

@model Application_Name.Models.Model_Name 

Zum Iterieren der Liste auf der Rasiermesserseite (Sie müssen foreach-Schleife verwenden, um auf die Listenelemente zuzugreifen.)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }
Veer Jangid
quelle
10

Sie können dies versuchen

@using MyNamespace
Abhishek Siddhu
quelle
3

"using MyNamespace" funktioniert in MVC3 RTM. Hoffe das hilft.

Howard
quelle
2

Ich denke, um den Namespace in der Rasiermesseransicht zu importieren, müssen Sie nur den folgenden Weg hinzufügen:

@using XX.YY.ZZ
HiteshAjudiya
quelle
0

Je nach Bedarf können Sie eine der folgenden Methoden anwenden:

Imran Javed
quelle