【问题标题】:How to call extension methods using Eval in a databound control如何在数据绑定控件中使用 Eval 调用扩展方法
【发布时间】:2010-09-27 04:59:16
【问题描述】:

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

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

这在代码中效果很好,但我想在中继器模板中使用这种扩展方法。数据绑定时,我想做以下事情:

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

这没用,所以我尝试了:

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

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

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

谢谢

【问题讨论】:

    标签: asp.net data-binding extension-methods late-bound-evaluation


    【解决方案1】:

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

    就我而言,我忘记导入我的 Extensionmethod-class 的命名空间。即使页面背后的代码包含命名空间,aspx-page 却没有。

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

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

    瞧!

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        看来我可以回答我自己的问题了! 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>
        

        我仍然需要在 Eval 中执行转换为 (int),但这至少对我来说是有意义的。

        【讨论】:

          【解决方案5】:

          Eval("LengthInSeconds") 自己工作吗?

          【讨论】:

          • 是的,刚刚返回了字符串形式的int。
          猜你喜欢
          • 2018-06-21
          • 2012-12-10
          • 2011-02-04
          • 2012-05-02
          • 1970-01-01
          • 2011-02-15
          • 1970-01-01
          • 2014-05-24
          • 1970-01-01
          相关资源
          最近更新 更多