Come importare uno spazio dei nomi nella pagina Vista rasoio?


Risposte:


852

Finalmente ho trovato la risposta.

@using MyNamespace

Per VB.Net:

@Imports Mynamespace

Dai un'occhiata alla risposta di @ravy amiry se desideri includere uno spazio dei nomi nell'app.


4
Inoltre: non possono andare in blocchi di codice. (Riceverai un errore di runtime)
Dan Esparza,

5
Inoltre non è necessario il punto e virgola.
RPM1984,

5
Questo è solo un periodo di cattiva pratica. Si prega di non aggiungere questo nella parte superiore delle pagine del rasoio. Questo è disordinato ecc ... Il modo corretto è quello di aggiungere a Views - web.config proprio come sottolinea @Javad_Amiry.
Tom Stickel,

21
Non è una cattiva pratica. È una caratteristica assolutamente necessaria. web.config è come un'istruzione using globale che rende lo spazio dei nomi attivo in TUTTE le tue pagine. Potrebbe non essere quello che desideri se hai classi con lo stesso nome in spazi dei nomi diversi. Avrai comunque un conflitto se provi a usarli nello stesso file, ma puoi risolverlo facilmente all'interno di un singolo file. Se lo attacchi in web.config, il conflitto sorgerebbe in tutte le tue pagine che utilizzano una delle classi. Quindi chiamare questa cattiva pratica non ha alcun senso.
Triynko,

4
Sono sorpreso che Intellisense non suggerisca di aggiungere l'istruzione using allo stesso modo delle normali pagine C #.
Triynko,

397

Il primo modo è utilizzare questa @usingistruzione nei .cshtmlfile, che importa uno spazio dei nomi solo nel file corrente e il secondo:

Nel file "web.config" nella Viewsdirectory " " del tuo progetto (nota che non è il web.config principale nella radice del progetto) , trova questa sezione:

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

puoi aggiungere il tuo spazio dei nomi personalizzato in questo modo:

<add namespace="My.Custom" />

che aggiungerà lo spazio dei nomi a tutti i file .cshtml (e / o .vbhtml); inoltre puoi modificare l'ereditarietà delle viste da qui, come:

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

Saluti.


AGGIORNAMENTO: Grazie a @ Nick Silbersteinper il suo promemoria sulle aree! Egli ha detto:

Se lavori all'interno di un'area , devi aggiungere namespaceall'interno di Web.configsotto /Areas/<AreaName>/Views/anziché /Views/


10
@vtortola: quale web.config? il file web.config nella cartella Views, non il web.config principale nella cartella principale. ok?
Ravy amiry,

9
Spero di salvare qualcuno qualche minuto dopo aver tolto i capelli e dire che se lavori all'interno di un'area, devi aggiungere lo spazio dei nomi all'interno di Web.config in / Aree / <AreaName> Viste / anziché / Visualizzazioni/.
Nick Silberstein,

11
@MatthijsWessels No, non è necessario riavviare VS. Basta costruire il progetto e avrà effetto. Almeno lo faccio sempre. Se una vista è aperta, è necessario chiudere quella vista prima della compilazione e riaprirla dopo la compilazione.
Ravy Amiry,

2
@Javad_Amiry, aha, ho ricostruito, ma non ho chiuso la vista.
Matthijs Wessels,

1
Sì, questo è il modo corretto. Non l'istruzione Using nella parte superiore della pagina Razor come nella risposta selezionata all'OP ...
Tom Stickel,

30

Per la biblioteca

@using MyNamespace

Per modello

@model MyModel

1
Perché non c'è? alla fine?
FrenkyB,

2
@FrenkyB perché questo non è un codice C #, è un codice Razor. usingL'all'inizio di un file con estensione cs è una parola chiave compilatore C #. L' @usinginizio di un file .cshtml è un suggerimento per il motore del modello Razor.
Segna il

27

In ASP.NET MVC 3 Preview1 è possibile importare uno spazio dei nomi su tutte le viste del rasoio con questo codice in Global.asax.cs

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

Spero che in RTM questo venga fatto attraverso la sezione Web.config.


6
Ci sarà una sezione web.config in RTM, ma volevamo anche fornire un'API per farlo perché molti utenti stanno iniziando a gravitare lontano dalla configurazione. Quindi abbiamo entrambe le opzioni disponibili per te!
Andrew Stanton-Nurse,

6
A partire da ASP.NET MVC 3 Beta questo metodo non funziona più. C'è una nuova sezione web.config come spiegato qui stackoverflow.com/questions/3875207/… . Il metodo AddGlobalImport per l'importazione di uno spazio dei nomi globale in tutte le viste è stato spostato in questa classe System.Web.WebPages.Razor.WebPagesRazorHost
Germán

16

Ho trovato questo http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx che spiega come aggiungere uno spazio dei nomi personalizzato a tutte le pagine del tuo rasoio.

Fondamentalmente puoi farlo

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

e inserisci il seguente codice in AssemblyInfo.cs

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

il metodo InitializeApplication verrà eseguito prima di Application_Start in global.asax


4
Questa è in realtà una risposta piuttosto buona, ma la posizione di è Microsoft.WebPages.Compilation.AddGlobalImportstata cambiata in System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu,

2
Il grande vantaggio dell'utilizzo di questo metodo deriva dal fatto che lo spazio dei nomi sarà utilizzabile in tutte le viste (comprese quelle all'interno delle aree) pur essendo dichiarato in un solo posto.
jahu,

14

Un problema che devi sapere è che quando importi uno spazio dei nomi web.confignella Viewscartella, namespaceviene importato SOLO per le viste in quella cartella . Significa che se si desidera importare una vista namespacein un'area , è necessario importare anche quella namespace, nel web.configfile di quell'area , situata nella Viewscartella dell'area ;


11

Per spazio dei nomi e libreria

@using NameSpace_Name

Per modello

@model Application_Name.Models.Model_Name 

Per scorrere l'elenco nella pagina Rasoio (devi usare foreach loop per accedere alle voci dell'elenco)

@model List<Application_Name.Models.Model_Name>

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


3

"using MyNamespace" funziona in MVC3 RTM. Spero che sia di aiuto.


2

Penso che per importare lo spazio dei nomi in vista rasoio, devi solo aggiungere il seguente modo:

@using XX.YY.ZZ

0

A seconda delle necessità, è possibile utilizzare uno dei seguenti metodi:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.