代码之家  ›  专栏  ›  技术社区  ›  Scott Muc

如何在数据绑定控件中使用eval调用扩展方法

  •  12
  • Scott Muc  · 技术社区  · 17 年前

    我在int类型上有一个简单的扩展方法,因此我可以执行以下操作:

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

    这在代码中很有用,但我想在转发器模板中使用这个扩展方法。当数据绑定时,我要执行以下操作:

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

    那不起作用,所以我试着:

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

    但它仍然不起作用。JIT编译器没有看到我的扩展方法,我在页面中有正确的import语句。

    我解决这个问题的唯一方法是用一个文本控件替换eval,并在代码后面调用扩展方法,但是不管怎样,我仍然想知道为什么这个方法不起作用。

    谢谢

    5 回复  |  直到 15 年前
        1
  •  9
  •   brianpeiris    15 年前

    我也遇到了同样的问题,最终找到了解决办法。

    在我的例子中,我忘记了导入扩展方法类的名称空间。尽管代码隐藏页包含了名称空间,但ASPX页没有。

    我刚在web.config文件中添加了名称空间:

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

    瞧!!

        2
  •  6
  •   Scott Muc    17 年前

    看来我得回答我自己的问题了!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),但这至少对我来说是有意义的。

        3
  •  6
  •   dan richardson    16 年前

    另一个为我解决这个问题的解决方案(类似于Patrik的解决方案)是只导入特定控件或ASPX页上的名称空间。

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

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

        4
  •  0
  •   shahkalpesh    17 年前

    eval(“lengthinseconds”)是否可以自己工作?

        5
  •  0
  •   Patrik Karlsson    17 年前

    命名空间声明在web.config文件的pages元素下完成,如下所示:

    <pages styleSheetTheme="Default">
          <namespaces>
            <add namespace="MyNamespace"/>
          </namespaces>
    
    推荐文章