12

tengo un método simple extensión del tipo int para que pueda hacer lo siguiente:cómo llamar a los métodos de extensión utilizando Eval en un control de enlace de datos

string timeLength = 61.ToTime() // timeLength will be "1:01" 

Esto funciona muy bien en el código, pero quiero utilizar este método de extensión en una plantilla repetidora Cuando enlace de datos que quiero hacer lo siguiente:

<%# Eval("LengthInSeconds").ToTime() %> 

que no funcionó, así que trataron:

<%# ((int) Eval("LengthInSeconds")).ToTime() %> 

y que todavía no ha funcionado. El compilador JIT no está viendo mi método de extensión y tengo la declaración de importación correcta en la página.

Mi única idea para resolver esto es reemplazar el Eval con un control Literal y llamar al método de extensión en el código subyacente, pero de cualquier forma, me gustaría saber por qué esto no funciona.

Gracias

Respuesta

6

¡Parece que puedo responder mi propia pregunta! Asp.Net estaba compilando las plantillas .aspx, .ascx usando el compilador .Net 2.0. Yo tenía que añadir lo siguiente a mi web.config para que funcione

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> 
     <providerOption name="CompilerVersion" value="v3.5"/> 
     <providerOption name="WarnAsError" value="false"/> 
     </compiler> 
    </compilers> 
    </system.codedom> 

todavía tengo para realizar el reparto a (int) en el Eval, pero que al menos tiene sentido para mí.

+0

Esto era * exactamente * lo que estaba buscando, ¡gracias! –

0

¿El Eval ("LengthInSeconds") el trabajo por sí mismo?

+0

Sí, eso acaba de devolver el int en forma de cadena. –

9

Tuve el mismo problema y finalmente encontré la solución.

En mi caso había olvidado importar el espacio de nombres de mi clase Extensionmethod. Aunque el código detrás de la página incluye el espacio de nombres, la página aspx no.

acabo añade el espacio de nombres en el archivo web.config:

<pages styleSheetTheme="Default"> 
    <namespaces> 
    <add namespace="MyNameSpace"/> 
    </namespaces> 

y listo !!

+0

enlace para la documentación http://msdn.microsoft.com/en-us/library/ms164642.aspx y el ejemplo:

0

La declaración de espacio de nombres se hace debajo del elemento de páginas en el archivo web.config de esta manera:

<pages styleSheetTheme="Default"> 
     <namespaces> 
     <add namespace="MyNamespace"/> 
     </namespaces> 
6

Otra solución que resolvió por mí (que es similar a la de Patrik), es simplemente importar el espacio de nombres en ese control específico o página aspx.

<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %> 

Esta solución fue más apropiada con mi problema ya que los métodos de extensión eran solo para una clase utilizada en un control.

Cuestiones relacionadas