page net mvc custom crear asp asp.net-mvc-3 extension-methods razor html-helper

asp.net mvc 3 - net - Razor HtmlHelper Extensions(u otros espacios de nombres para vistas) Not Found



html textbox asp net (8)

No sé si esto estaba sucediendo en el RP o Beta, pero si creo un método de extensión en HtmlHelper , no se reconoce en una página potenciada por Razor:

namespace SomeNamespace.Extensions { public static class HtmlExtensions { public static string Foo(this HtmlHelper html) { return "Foo"; } } }

Lo agregué a la sección <Namespaces> en Web.config :

<pages> <namespaces> <add namespace="System.Web.Mvc" /> <!-- snip --> <add namespace="SomeNamespace.Extensions"/> </namespaces> </pages>

Pero arroja un error de compilación cuando intenta ver la página:

@Html.Foo()

Si recreo la página con WebForms , funciona bien. ¿Cual es el trato?

Solución

Si @using SomeNamespace.Extensions en mi vista Razor, entonces funciona, pero prefiero solo tenerlo en Web.config


Como ASP.NET MVC 3 RTM está disponible, no hay necesidad de una sección de configuración para Razor. Y estas secciones se pueden eliminar de forma segura.


Como la respuesta aceptada sugiere, puede agregar "usar" a todas las vistas al agregar a la sección del archivo de configuración.

Pero para una vista única, podrías usar

@usando SomeNamespace.Extensions


Descubrí que poner esta sección en mi web.config para cada carpeta de vista lo resolvió.

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>


Desde el Beta, Razor usa una sección de configuración diferente para las importaciones de espacios de nombres que definen globalmente. En su archivo Views/Web.config , debe agregar lo siguiente:

<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> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <!-- Your namespace here --> </namespaces> </pages> </system.web.webPages.razor>

Use la herramienta de actualización de MVC 3 para asegurarse automáticamente de tener los valores de configuración correctos.

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


En mi caso use VS 2013, y no es compatible con MVC 3 de forma nativa (incluso usted cambia ./Views/web.config): https://.com/a/28155567/1536197


Este error le dice que no tiene el motor de afeitar correctamente asociado con su proyecto.

Solución: en la ventana del Explorador de soluciones, haga clic derecho en su proyecto web y seleccione "Administrar paquetes Nuget ..." y luego instale "Microsoft ASP.NET Razor". Esto se asegurará de que esté instalado correctamente el paquete y agregará las entradas necesarias en su archivo web.config.


Tuve el mismo error en una aplicación MVC 4 usando Razor. En un intento de limpiar los archivos web.config, eliminé las dos webpages: valores de configuración:

<appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" />

Una vez que restaure estos valores de configuración, las páginas se compilarían correctamente y los errores relacionados con el método de extensión .Partial() desaparecieron.


Tuve este problema en VS 2015. Lo siguiente lo resolvió para mí:

Busque "páginas web: Versión" en las aplicaciones y actualícela a la versión 3.0.0.0. Mi web.config tenía

<add key="webpages:Version" value="2.0.0.0" />

y lo actualicé a

<add key="webpages:Version" value="3.0.0.0" />