12

我有int类型的简单扩展方法使用eval,所以我可以做的工作如何调用扩展方法如下:在数据绑定控件

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

此作品在代码很大,但我想用这个Repeater模板中的扩展方法。绑定时我要做到以下几点:

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

这并没有工作,所以我尝试:

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

,它仍然没有工作。 JIT编译器没有看到我的扩展方法,并且在页面中有正确的导入语句。

我唯一的想法是解决这个问题是用Literal控件替换Eval并在代码隐藏中调用扩展方法,但无论如何,我仍然想知道为什么这不起作用。

感谢

回答

6

看起来我可以回答我自己的问题! Asp.Net使用.Net 2.0编译器编译.aspx,.ascx模板。我需要以下添加到我的web.config,使其工作

<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> 

我还是要执行的评估和演示投给(INT),但至少对我来说很有意义。

+0

这是*正是*我正在寻找 - 谢谢堆! – 2010-10-03 21:30:02

0

确实的eval( “LengthInSeconds”)本身的工作?

+0

是的,那只是返回int形式的字符串。 – 2008-12-16 19:49:55

9

我有同样的问题,并最终找到解决方案。

在我的情况下,我忘了导入我的Extensionmethod类的命名空间。即使页面后面的代码包含名称空间,aspx页面也没有。

我刚添加的命名空间中的web.config文件:

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

,瞧!

+0

链接,文档http://msdn.microsoft.com/en-us/library/ms164642.aspx 和例如: <页面主题= “默认”> <添加命名空间=“MyExample.Example.Web “/> 2010-01-15 14:57:29

0

的命名空间声明的页面元素下完成的web.config文件是这样的:

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

另一种解决方案,解决了这个问题对我来说(这类似于帕特里克的),是刚刚导入命名空间在特定的控件或aspx页面上。

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

这个解决方案更适合我的问题,因为扩展方法只适用于一个控件中使用的类。