Pregunta

Estoy construyendo un sitio web ASP.Net MVC. En lugar de tener todo en un proyecto, he decidido separar la Web, el Modelo y el Controlador en diferentes proyectos en la misma solución, que se refieren entre sí.

La referencia es así:

  

Web --- [referencias] --- > Controlador --- [referencias] --- & Gt; Modelo

Ahora quería agregar 2 métodos personalizados a la clase HtmlHelper: se llaman " IncludeScript " y " IncludeStyle " ;. Cada uno toma un único parámetro de cadena y genera un script o etiqueta de enlace respectivamente.

Creé una clase extensora, de acuerdo con la documentación en la web, escribí los dos métodos y compilé la aplicación.

Ahora, cuando entro en la página Public.Master (que es mi página maestra principal y uno de los lugares donde pretendo usar estos métodos), puedo ingresar código como el siguiente:

<%= Html.IncludeScript("\js\jquery.js") %>

El IntelliSense recoge y el método IncludeScript y me muestra la sintaxis muy bien. Así que esperaría que todo funcione.

Pero no lo hace.

Todo se compila, pero tan pronto como ejecuto la aplicación, aparece el siguiente error de tiempo de ejecución de la línea 14 de Default.aspx.cs:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

Aquí está la línea de código en la que ocurre el error:

httpHandler.ProcessRequest(HttpContext.Current);

¿Alguna idea de qué podría estar yendo mal aquí?

¿Fue útil?

Solución

Verifique para asegurarse de que el espacio de nombres de sus extensiones sea accesible para nuestra vista. Usted necesita esto desde su punto de vista:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

o esto en la sección de espacios de nombres de configuración web:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Otros consejos

Si está utilizando vistas fuertemente tipadas , y su método de extensión se extiende HtmlHelper<object>, no encontrará la extensión. Tendría que crear un extensor genérico para extender HtmlHelper<T>.

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

Entonces verá aparecer su método extensor.

Espero que eso ayude.

Asegúrese de tener una directiva de importación para el espacio de nombres de sus métodos de extensiones en su página.

De lo contrario, Visual Studio podría ver, pero su sitio web no podrá verlo.

¿Está seguro de que el compilador está configurado en .NET Framework 3.5? Esto me sucedió cuando configuré el compilador a .NET Framework 2.0 inadvertidamente

En el método IncludeScript, asegúrese de que lo que está extendiendo es System.Web.Mvc.HtmlHelper. Es posible que haya un HtmlHelper en algún otro espacio de nombres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top