2012-07-17 21 views
6

Estoy tratando de usar un método de extensión de cadena en una vista parcial. Me sale el siguiente error:No se puede usar el método de extensión en la vista parcial

'string' does not contain a definition for 'TruncateAtCharacter'

Aquí es el método de extensión:

namespace PCCMS.Core.Libraries { 
    public static class Extensions { 
     public static string TruncateAtCharacter(this string input, int length) { 
      if (String.IsNullOrEmpty(input) || input.Length < length) 
       return input; 

      return string.Format("{0}...", input.Substring(0, length).Trim()); 
     } 
    } 
} 

Según this previous question tengo que añadir el espacio de nombres de web.config, sin embargo, he hecho esto y todavía recibir el mismo mensaje de error Sin embargo, lo que es extraño, ¿es que obtengo intellisense para el método de extensión?

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="PCCMS.Core.Libraries.ClientWebViewPage"> 
     <namespaces> 
      <add namespace="System.Web.Mvc" /> 
      <!-- Other namespaces... --> 
      <add namespace="PCCMS.Core.Libraries" /> 
     </namespaces> 
    </pages> 
</system.web.webPages.razor> 

¿Alguien puede explicar por qué es esto?

Gracias

Respuesta

1

Esto debería funcionar si la declaración de espacio de nombres se encuentra en el elemento de espacios de nombres/system.web.webPages.razor de su directorio raíz Vistas web.config. Si eso no funciona, intente utilizar una declaración @using explícita en la parte superior de la vista sin ninguna instrucción web.config. Deberia de funcionar.

PS ¿Es eso ReSharper intellisense o VS? ReSharper me dice explícitamente que se requiere un @ uso si la entrada web.config no está dentro del alcance.

+0

Lo siento, debería haber mencionado que traté de agregar un @using en el parcial y eso no funcionó. Tampoco tiene que agregar la declaración del espacio de nombres a la web.config dentro del área, ni a la que está en la raíz del proyecto. –

+0

Acabo de copiar su código y solo funciona si uso una declaración @using en la vista. Solo hacer referencia al espacio de nombres en cualquiera de las configuraciones no hace nada. –

+0

Bien. Acabo de hacerlo funcionar solo con el archivo web.config en el directorio de Vistas y sin la declaración @using en la Vista misma. Estoy usando el elemento system.web.webPages.razor/namespaces. No tenía ese elemento en mi configuración de root y cuando agregué la declaración al sistema predeterminado.web.pages también, confundió el analizador. Intenta ponerlo en Views web.config. –

0

¿Se está produciendo el error al ejecutar en el depurador VS, o desde un sistema de prueba o producción? Asegúrese de que su módulo que contiene la extensión esté correctamente instalado (y actualizado correctamente). Además, intente ejecutar "iisreset" desde el símbolo del sistema.

Cuestiones relacionadas