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