2010-01-21 17 views
11

He creado un método de extensión:vista MVC no puede encontrar mi método de extensión

namespace MyComp.Web.MVC.Html 
{ 
    public static class LinkExtensions 
    { 
     public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName) 
     { 
      ... 
     } 
    } 
} 

he indicado el ensamblado de mi aplicación MVC, y he intentado importar el espacio de nombres en mi opinión:

<%@ Import Namespace="MyComp.Web.Mvc.Html" %> 

y yo también hemos añadido al archivo web.config:

<pages> 
    <controls> 
     ... 
    </controls> 
    <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.Linq"/> 
     <add namespace="System.Collections.Generic"/> 
     <add namespace="MyComp.Web.Mvc.Html"/> 
    </namespaces> 
</pages> 

En mi opinión, si intento acceder a Html.ActionImage Enlace Obtengo un error al decir que System.Web.Mvc.HtmlHelper no contiene una definición para ActionImageLink que acepte un primer tipo de argumento de System.Web.Mvc.HtmlHelper. No veo ninguno de los métodos de extensión de ActionLink para System.Web.Mvc.HtmlHelper, solo para System.Web.Mvc.HtmlHelper, entonces, ¿cómo funciona para el .NET Framework, y no para mí?

+0

Esto es raro. Parece que hiciste todo bien. Supongo que el error aparece cuando ejecuta el sitio web y no solo en la vista de código VS. – Omar

+0

¿puedes pegar tu código de vista? – Rony

+0

@Baddie, no, si compilo, VS me muestra los errores incluso antes de ejecutar la aplicación. – Jeremy

Respuesta

14

Observe la diferencia en el caso de su espacio de nombres al declarar y al importar.

namespace MyComp.Web.MVC.Html 
{ 
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %> 
<add namespace="MyComp.Web.Mvc.Html"/> 

¡Los espacios de nombres distinguen mayúsculas de minúsculas!

+0

Arg! Sabía que eran sensibles a mayúsculas y minúsculas, pero no capté el error tipográfico. Pero, de nuevo, ¡nadie más que tú! ¡DECIR AH! – Jeremy

+0

buena captura, se perdió esa – hunter

0

Uno de los motivos puede ser que devuelva un MvcHtmlString y no una cadena. Incluye el espacio de nombres para la clase MvcHtmlString. Ve si ayuda.

+0

Los métodos de extensión ActionLink existentes también devuelven MvcHtmlString. – Jeremy

+0

El valor de retorno de la función no tiene nada que ver con eso. – Omar

+0

Probé el código anterior de Jeremy, funciona bien para mí. Es extraño, que no funciona para Jeremy. – San

4

Intente apagar Visual Studio y vuelva a abrir su Solución. Cuando las cosas empiezan a actuar de forma extraña, algunas veces esto ayuda.

+1

¡Eso funcionó para mí! – Mitch

1
  1. ¿El Intellisense VS autocompleta su método de extensión? ¿Completa automáticamente los métodos estándar de ayudantes MVC? Si no, entonces se produjo el error de complilación de vista. Asegúrese de tener el valor de atributo "Herencias" correcto en la etiqueta de la página al comienzo de la vista. Si usa vistas fuertemente tipadas, asegúrese de que el "tipo fuerte" exista y compile.

  2. ¿Define el método de extensión en el mismo proyecto donde se define la vista? Si no, debes agregar la referencia en el proyecto mvc. Finalmente compruebe si el ensamblado con el método de extensión (MyComp.Web.Mvc.Html.dll?) Está en la carpeta Bin de la aplicación

  3. Intente agregar la declaración del espacio de nombres a la sección de páginas/espacios de nombres de la web. archivo de configuración colocado en su carpeta de Vistas en el proyecto MVC (no en el archivo principal del proyecto web.config).

6

Debe agregar el espacio de nombres en el web.config sino en el interior de las vistas de carpetas

1

cerrar y abrir Visual Studio hizo el truco !!

Cuestiones relacionadas