Comment importer un espace de noms dans la page de vue Razor?

Réponses:

852

Enfin trouvé la réponse.

@using MyNamespace

Pour VB.Net:

@Imports Mynamespace

Jetez un œil à la réponse de @ravy amiry si vous souhaitez inclure un espace de noms dans l'application.

Amitabh
la source
4
Aussi: Ils ne peuvent pas entrer dans des blocs de code. (Vous obtiendrez une erreur d'exécution)
Dan Esparza
5
De plus, vous n'avez pas besoin du point-virgule.
RPM1984
5
C'est juste une mauvaise période de pratique. Veuillez ne pas l'ajouter en haut de vos pages de rasoir. C'est désordonné, etc. La manière correcte consiste à ajouter à Views - web.config comme le souligne @Javad_Amiry.
Tom Stickel
21
Ce n'est pas une mauvaise pratique. C'est une fonctionnalité absolument nécessaire. web.config est comme une instruction using globale qui rend l'espace de noms actif dans TOUTES vos pages. Ce n'est peut-être pas ce que vous voulez si vous avez des classes avec le même nom dans des espaces de noms différents. Vous aurez toujours un conflit si vous essayez de les utiliser dans le même fichier, mais vous pouvez le résoudre facilement dans un seul fichier. Si vous le collez dans web.config, le conflit surviendrait dans toutes vos pages qui utilisent l'une ou l'autre des classes. Donc, appeler cette mauvaise pratique n'a aucun sens.
Triynko
4
Je suis surpris qu'Intellisense ne suggère pas d'ajouter l'instruction using de la même manière que dans les pages C # normales.
Triynko
397

La première méthode consiste à utiliser l' @usinginstruction dans les .cshtmlfichiers, à importer un espace de noms uniquement dans le fichier actuel, et la seconde:

Dans le fichier "web.config" du répertoire " Views" de votre projet (notez qu'il ne s'agit pas du web.config principal à la racine du projet) , trouvez cette section:

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

vous pouvez ajouter votre espace de noms personnalisé comme ceci:

<add namespace="My.Custom" />

qui ajoutera l'espace de noms à tous les fichiers .cshtml (et / ou .vbhtml); vous pouvez également modifier l'héritage des vues à partir d'ici, comme:

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

Cordialement.


MISE À JOUR: Merci à @ Nick Silbersteinpour son rappel sur les zones! Il a dit:

Si vous travaillez dans une zone , vous devez ajouter le namespacedans le Web.configsous /Areas/<AreaName>/Views/plutôt que /Views/

ravy amiry
la source
10
@vtortola: quel web.config? le fichier web.config dans le dossier Views, pas le principal web.config dans le dossier racine. D'accord?
ravy amiry
9
Je souhaite, je l'espère, économiser quelques minutes à quelqu'un pour se coiffer et dire que si vous travaillez dans une zone, vous devez ajouter l'espace de noms dans le Web.config sous / Areas / <AreaName> Views / plutôt que / Vues /.
Nick Silberstein
11
@MatthijsWessels Non, il n'a pas besoin de redémarrer VS. Générez simplement le projet et il prendra effet. Au moins, je fais ça toujours. Si une vue est ouverte, vous devez fermer cette vue avant la génération et la rouvrir après la génération.
amy ravy
2
@Javad_Amiry, aha, j'ai reconstruit, mais je n'ai pas fermé la vue.
Matthijs Wessels
1
Oui, c'est la bonne façon. Pas la déclaration Using en haut de la page Razor comme dans la réponse OP choisie ....
Tom Stickel
30

Pour la bibliothèque

@using MyNamespace

Pour le modèle

@model MyModel
Alper Şaldırak
la source
1
Pourquoi n'y a-t-il pas; à la fin?
FrenkyB
2
@FrenkyB parce que ce n'est pas du code C #, c'est du code Razor. Le usingdébut d'un fichier .cs est un mot clé du compilateur C #. Le @usingdébut d'un fichier .cshtml est une indication du moteur de modèle Razor.
Mark
27

Dans ASP.NET MVC 3 Preview1, vous pouvez importer un espace de noms sur toutes vos vues de rasoir avec ce code dans Global.asax.cs

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

J'espère qu'en RTM, cela se fait via la section Web.config.

Allemand
la source
6
Il y aura une section web.config dans RTM, mais nous voulions également fournir une API pour ce faire car de nombreux utilisateurs commencent à s'éloigner de la configuration. Nous avons donc les deux options disponibles pour vous!
Andrew Stanton-Nurse
6
Depuis ASP.NET MVC 3 Beta, cette méthode ne fonctionne plus. Il y a une nouvelle section web.config comme expliqué ici stackoverflow.com/questions/3875207/… . La méthode AddGlobalImport pour importer un espace de noms global dans toutes les vues a été déplacée dans cette classe System.Web.WebPages.Razor.WebPagesRazorHost
Germán
16

J'ai trouvé ce http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx qui explique comment ajouter un espace de noms personnalisé à toutes vos pages de rasoir.

Fondamentalement, vous pouvez faire cela

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

et placez le code suivant dans votre AssemblyInfo.cs

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

la méthode InitializeApplication sera exécutée avant Application_Start dans global.asax

k-dev
la source
4
C'est en fait une assez bonne réponse, mais l'emplacement de a Microsoft.WebPages.Compilation.AddGlobalImportété changé pour System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu
2
Le gros avantage de l'utilisation de cette méthode vient du fait que l'espace de noms sera utilisable dans toutes les vues (y compris celles situées dans les zones) tout en étant déclaré en un seul endroit.
jahu
14

Un problème que vous devez savoir est que lorsque vous importez un espace de noms via web.configdans le Viewsdossier, celui-ci namespaceest importé JUSTE pour les vues dans ce dossier . Signifie que si vous souhaitez importer une vue namespacedans une zone , vous devez également importer celle namespace, dans le web.configfichier de cette zone , située dans le Viewsdossier de la zone ;


la source
11

Pour l'espace de noms et la bibliothèque

@using NameSpace_Name

Pour le modèle

@model Application_Name.Models.Model_Name 

Pour itérer la liste sur la page Razor (vous devez utiliser une boucle foreach pour accéder aux éléments de la liste)

@model List<Application_Name.Models.Model_Name>

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

Vous pouvez essayer ceci

@using MyNamespace
Abhishek Siddhu
la source
3

"Utiliser MyNamespace" fonctionne dans MVC3 RTM. J'espère que cela t'aides.

Howard
la source
2

Je pense que pour importer l'espace de noms en vue rasoir, il vous suffit d'ajouter ci-dessous:

@using XX.YY.ZZ
HiteshAjudiya
la source
0

Selon vos besoins, vous pouvez utiliser l'une des méthodes suivantes:

Imran Javed
la source