¿Cómo importo un espacio de nombres en la página de vista de Razor?

Respuestas:

852

Finalmente encontré la respuesta.

@using MyNamespace

Para VB.Net:

@Imports Mynamespace

Eche un vistazo a la respuesta de @ravy amiry si desea incluir un espacio de nombres en la aplicación.

Amitabh
fuente
44
Además: no pueden ir en bloques de código. (Obtendrá un error de tiempo de ejecución)
Dan Esparza
55
Tampoco necesitas el punto y coma.
RPM1984
55
Este es solo un período de mala práctica. No agregue esto a la parte superior de sus páginas de afeitar. Esto es desordenado, etc. La forma correcta es agregar Vistas - web.config tal como lo señala @Javad_Amiry.
Tom Stickel
21
No es una mala práctica. Es una característica absolutamente necesaria. web.config es como una declaración de uso global que activa el espacio de nombres en TODAS sus páginas. Es posible que eso no sea lo que desea si tiene clases con el mismo nombre en diferentes espacios de nombres. Aún tendrá un conflicto si intenta usarlos en el mismo archivo, pero puede resolverlo fácilmente en un solo archivo. Si lo pega en web.config, entonces el conflicto surgiría en todas sus páginas que usan cualquiera de las clases. Entonces llamar a esta mala práctica no tiene ningún sentido.
Triynko
44
Me sorprende que Intellisense no sugiera agregar la declaración de uso de la misma manera que lo hace en las páginas normales de C #.
Triynko
397

La primera forma es usar la @usingdeclaración en los .cshtmlarchivos, que importa un espacio de nombres solo al archivo actual, y la segunda:

En el archivo "web.config" en el Viewsdirectorio " " de su proyecto (observe que no es el principal web.config en la raíz del proyecto) , busque esta sección:

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

puedes agregar tu espacio de nombres personalizado de esta manera:

<add namespace="My.Custom" />

eso agregará el espacio de nombres a todos los archivos .cshtml (y / o .vbhtml); También puede cambiar la herencia de vistas desde aquí, como:

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

Saludos.


ACTUALIZACIÓN: ¡ Gracias a @ Nick Silbersteinpor su recordatorio sobre áreas! Él dijo:

Si está trabajando dentro de una zona , debe agregar el namespaceplazo de la Web.configvirtud /Areas/<AreaName>/Views/en lugar de /Views/

ravy amiry
fuente
10
@vtortola: ¿qué web.config? el archivo web.config en la carpeta Vistas, no el archivo web.config principal en la carpeta raíz. ¿De acuerdo?
ravy amiry
99
Espero poder salvar a alguien unos minutos de arrancarse el pelo y decir que si está trabajando dentro de un área, debe agregar el espacio de nombres dentro de la Web.config en / Areas / <AreaName> Vistas / en lugar de / Puntos de vista/.
Nick Silberstein
11
@MatthijsWessels No, no es necesario reiniciar VS. Simplemente construya el proyecto y surtirá efecto. Al menos hago esto siempre. Si una vista está abierta, debe cerrar esa vista antes de compilar y volver a abrirla después de compilar.
ravy amiry
2
@Javad_Amiry, ajá, reconstruí, pero no cerré la vista.
Matthijs Wessels
1
Sí, esta es la forma correcta. No es la declaración de Uso en la parte superior de la página de Razor como en la respuesta OP seleccionada ...
Tom Stickel
30

Para la biblioteca

@using MyNamespace

Para el modelo

@model MyModel
Alper Şaldırak
fuente
1
¿Por qué no hay? ¿al final?
FrenkyB
2
@FrenkyB porque este no es el código C #, es el código Razor. El usingprincipio de un archivo .cs es una palabra clave del compilador de C #. El @usingprincipio de un archivo .cshtml es una pista para el motor de plantillas Razor.
Mark
27

En ASP.NET MVC 3 Preview1 puede importar un espacio de nombres en todas sus vistas de rasuradora con este código en Global.asax.cs

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

Espero que en RTM esto se haga a través de la sección Web.config.

Alemán
fuente
66
Habrá una sección web.config en RTM, pero también queríamos proporcionar una API para hacerlo porque muchos usuarios están comenzando a alejarse de la configuración. ¡Entonces tenemos ambas opciones disponibles para usted!
Andrew Stanton-Nurse
66
A partir de ASP.NET MVC 3 Beta, este método ya no funciona. Hay una nueva sección web.config como se explica aquí stackoverflow.com/questions/3875207/… . El método AddGlobalImport para importar un espacio de nombres global a todas las vistas se ha movido a esta clase System.Web.WebPages.Razor.WebPagesRazorHost
Germán
16

Encontré este http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx que explica cómo agregar un espacio de nombres personalizado a todas sus páginas de afeitar.

Básicamente puedes hacer esto

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

y ponga el siguiente código en su AssemblyInfo.cs

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

el método InitializeApplication se ejecutará antes de Application_Start en global.asax

k-dev
fuente
44
Esta es en realidad una respuesta bastante buena, pero la ubicación de Microsoft.WebPages.Compilation.AddGlobalImportse cambió a System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu
2
La gran ventaja de usar este método proviene del hecho de que el espacio de nombres será utilizable en todas las vistas (incluidas aquellas dentro de las áreas) mientras se declara en un solo lugar.
jahu
14

Un problema que debe saber es que cuando importa un espacio de nombres a través web.configde una Viewscarpeta, namespacese importa SOLO para las vistas en esa carpeta . Significa que si desea importar vistasnamespace en un área , también debe importar eso namespace, en el web.configarchivo de esa área , ubicado en la Viewscarpeta del área ;


fuente
11

Para espacio de nombres y biblioteca

@using NameSpace_Name

Para el modelo

@model Application_Name.Models.Model_Name 

Para iterar la lista en la página de Razor (debe usar el bucle foreach para acceder a los elementos de la lista)

@model List<Application_Name.Models.Model_Name>

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

Puedes probar esto

@using MyNamespace
Abhishek Siddhu
fuente
3

"Usar MyNamespace" funciona en MVC3 RTM. Espero que esto ayude.

Howard
fuente
2

Creo que para importar el espacio de nombres en la vista de afeitar, solo necesita agregar a continuación:

@using XX.YY.ZZ
HiteshAjudiya
fuente
0

Dependiendo de su necesidad, puede usar uno de los siguientes métodos:

Imran Javed
fuente