tutorial sintaxis que paginas pages mvc español asp.net-mvc-3 razor

asp.net mvc 3 - sintaxis - ¿Cómo agregar espacios de nombres adicionales a las páginas Razor en lugar de usar la declaración?



razor pages vs mvc (5)

Encontré este http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx que explica cómo agregar un espacio de nombre 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

¿Hay alguna clase de magia que necesito usar para obtener los espacios de nombres en el elemento pages/namespaces en el webconfig?

<pages> <namespaces> <add namespace="System.Web.Mvc"/> <add namespace="System.Web.Mvc.Ajax"/> <add namespace="System.Web.Mvc.Html"/> <add namespace="System.Web.Routing"/> <add namespace="System.Web.WebPages"/> <add namespace="System.Web.Helpers"/> <add namespace="MyCustomHelpers"/> </namespaces> </pages>

Lo anterior simplemente no quiere funcionar. Sé que el espacio de nombres está bien porque cuando pongo el @using MyCustomHelpers en la parte superior de la página funciona mágicamente.

Esto es para que pueda hacer funcionar el Html.SomeFunction() sin tener que poner @using en la parte superior de todas mis páginas



Por lo que vale, otra técnica es simplemente poner su clase de extensión auxiliar en un espacio de nombres del sistema que ya está incluido por el motor de vista de forma predeterminada. Por ejemplo:

namespace System.Web.Mvc { public static class HtmlHelper_MyExtensions { ... } }

De esta forma, siempre que se haga referencia a la biblioteca que contiene la clase, todo lo verá. Como está ampliando una clase System.Web.Mvc , parece razonablemente aceptable poner los métodos de extensión en el mismo espacio de nombres.


Si coloca su declaración de espacio de nombres en Web.config en la carpeta raíz "Vistas" y / o en la carpeta "Vistas" del área actual (dependiendo de dónde esté su vista), debería funcionar como se esperaba.


Actualización : por favor, eche un vistazo a mi respuesta actualizada que se aplica a MVC 3 RC: Razor HtmlHelper Extensions (u otros espacios de nombres para las vistas) Not Found

Esto ha cambiado entre MVC 3 Preview 1 y MVC 3 Beta (lanzado solo hoy). En Preview 1 Razor utilizó la sección de configuración de espacios de nombres de WebForms. Sin embargo, en la versión beta hay una nueva sección de configuración que está separada de la de WebForms. Necesitarás agregar lo siguiente a tu archivo web.config (o simplemente comenzar con un nuevo proyecto desde la plantilla):

<configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="MyCustomHelpers" /> </namespaces> </pages> </system.web.webPages.razor>

Tenga en cuenta que es posible que deba cerrar y volver a abrir el archivo para que el editor recoja los cambios.

Tenga en cuenta que hay otros cambios en lo que se requiere en web.config para que Razor funcione en MVC3 Beta, por lo que sería mejor que eche un vistazo al archivo ~/View/Web.config que se incluye en las plantillas de proyecto Beta.