12

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

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

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

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

那没有用,所以我尝试了:

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

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

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

谢谢

4

5 回答 5

9

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

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

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

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

瞧!

于 2009-01-28T08:42:47.473 回答
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>

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

于 2008-12-16T19:49:23.470 回答
6

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

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

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

于 2010-02-24T11:13:06.947 回答
0

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

于 2008-12-16T19:48:34.703 回答
0

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

<pages styleSheetTheme="Default">
      <namespaces>
        <add namespace="MyNamespace"/>
      </namespaces>
于 2009-01-28T08:44:13.337 回答