una que otra metodos metodo llamar funciones funcion firma extension ejemplos definicion como clase asp.net data-binding extension-methods late-bound-evaluation

asp.net - que - metodos y funciones en c#



Cómo llamar a los métodos de extensión utilizando Eval en un control de datos (5)

Tengo un método de extensión simple en el tipo int para que pueda hacer lo siguiente:

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

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

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

Eso no funcionó, así que lo intenté:

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

y todavía no funcionó. 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 Eval con un control Literal y llamar al método de extensión en el código subyacente, pero de todos modos, me gustaría saber por qué esto no funciona.

Gracias


¡Parece que puedo responder mi propia pregunta! Asp.Net estaba compilando las plantillas .aspx, .ascx usando el compilador .Net 2.0. Necesitaba agregar 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 que realizar el lanzamiento a (int) en el Eval, pero al menos tiene sentido para mí.


¿Eval ("LengthInSeconds") funciona por sí mismo?


La declaración de espacio de nombres se realiza debajo del elemento de páginas en el archivo web.config como este:

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


Otra solución que me solucionó (que es similar a la de Patrik) es 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.


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

En mi caso, me olvidé de 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 de agregar el espacio de nombres en el archivo web.config:

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

¡¡y voilá!!