2010-12-15 56 views
6

Estoy tratando de portar una vista ASP.NET MVC "clásica" a Razor y me quedé atascado cuando trato de usar un método de ayuda Html tradicional (no Razor). El método de ayuda tiene la siguiente firma:¿Por qué Razor no puede encontrar mi HTML Helper?

método
public static string WrappedValidationSummary(this HtmlHelper htmlHelper, string SummaryError) 
{ 
... 
} 

El ayudante funciona bien cuando se utiliza en vistas regulares (no afeitar).

cuando se utiliza en la Navaja vista como esta:

@Html.WrappedValidationSummary("Mitarbeiter konnnte nicht angelegt werden."); 

me sale un mensaje de error en tiempo de ejecución que

'System.Web.Mvc.HtmlHelper' no contiene una definición para 'WrappedValidationSummary' y ningún método extensión 'WrappedValidationSummary' aceptar un primer argumento de tipo 'System.Web.Mvc.HtmlHelper' se puede conocer (¿falta una directiva using o una referencia de ensamblado ?)

El comprobador de sintaxis Razor en Visual Studio y Intellisense tiene ningún problema para encontrar la definición de mi método de extensión. Volver a compilar el proyecto no ayuda.

¿Qué está pasando?

Respuesta

18

¿Ha agregado el espacio de nombres del ayudante a sus Vistas/web.config?

<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" /> 
     <add namespace="CUSTOM_NAMESPACE" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

Lo anterior sólo funcionará si está utilizando un RC, si estás en un Beta temprano, tendrá que añadir el espacio de nombres en la página o Global.asax.

Además, sugiero cambiar el tipo de devolución a HtmlString.

return new HtmlString(STRING_VALUE); 
+2

He añadido el espacio de nombres a mi web.config, pero no estaba al tanto de la sección de configuración adicional para los espacios de nombres de razor. ¡Gracias por la sugerencia! –

+0

No hay problema, me alegro de poder ayudar. – kim3er

+0

¿Todavía se requiere esto para el RTM? Todos los bits de Razor parecen estar incluidos en el ensamblado System.Web.Mvc, pero las clases de configuración de Razor no parecen estar allí. Los documentos para RazorWebSectionGroup dicen que está en System.Web.WebPages.Razor.dll, pero no puedo encontrar este ensamblado en el GAC. Ciertamente, no debería tener que hacer referencia a un conjunto separado para esto. –

5

Alternativamente, puede utilizar using en la primera línea de la vista en lugar de Vistas/Web.config si lo que desea utilizar para el archivo de vista específico.

@using your_current_web_namespace 
. 
. 
. 
@Html.WrappedValidationSummary("Mitarbeiter konnnte nicht angelegt werden.") 
+1

agregando el espacio de nombres a mi web.configs no hizo nada para el intellisense para mí; agregando el uso de la declaración trabajada. –

+0

Tal vez la forma en que agrega el espacio de nombres en Views/web.config obtuvo algún error. o intente reconstruir después de agregar el espacio de nombres. – CallMeLaNN

+3

Si lo agrega a Views/Web.config, necesita reiniciar Visual Studio para que funcione (Rebuilding/Cleaning la solución no lo soluciona). – Gabriel

Cuestiones relacionadas