I have a simple extension method on the int type so I can do the following:
string timeLength = 61.ToTime() // timeLength will be "1:01"
This works great in code, but I want to use this extension method in a Repeater Template. When databinding I want to do the following:
<%# Eval("LengthInSeconds").ToTime() %>
That didn't work so I tried:
<%# ((int) Eval("LengthInSeconds")).ToTime() %>
and it still didn't work. The JIT compiler is not seeing my extension method and I do have the proper import statement in the page.
My only idea for solving this is to replace the Eval with a Literal control and call the extension method in the code-behind, but either way, I would still like to know why this isn't working.
Thanks
I had the same problem, and eventually found the solution.
In my case I had forgot to import the namespace of my Extensionmethod-class. Even though the code behind page included the namespace, the aspx-page did not.
I just added the namespace in the web.config file:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNameSpace"/>
</namespaces>
and voila!!
Looks like I get to answer my own question! Asp.Net was compiling the .aspx,.ascx templates using the .Net 2.0 compiler. I needed to add the following to my web.config to make it work
<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>
I still have to perform the cast to (int) in the Eval, but that at least makes sense to me.
Another solution which solved it for me (which is similar to Patrik's), is to just import the namespace on that specific control or aspx page.
<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %>
This solution was more appropriate with my problem as the extension methods were only for a class used in the one control.
Does Eval("LengthInSeconds") work by itself?
The namespace declaration is done beneath the pages element in the web.config file like this:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNamespace"/>
</namespaces>
来源:https://stackoverflow.com/questions/372382/how-to-call-extension-methods-using-eval-in-a-databound-control