Asp.net

如何在數據綁定控制項中使用 Eval 呼叫擴展方法

  • May 17, 2011

我對 int 類型有一個簡單的擴展方法,因此我可以執行以下操作:

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

這在程式碼中效果很好,但我想在中繼器模板中使用這個擴展方法。數據綁定時,我想做以下事情:

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

那沒有用,所以我嘗試了:

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

它仍然沒有工作。JIT 編譯器沒有看到我的擴展方法,我在頁面中有正確的導入語句。

我解決這個問題的唯一想法是用 Literal 控制項替換 Eval 並在程式碼隱藏中呼叫擴展方法,但無論哪種方式,我仍然想知道為什麼這不起作用。

謝謝

看來我可以回答我自己的問題了!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) 進行強制轉換,但這至少對我來說是有意義的。

我遇到了同樣的問題,最終找到了解決方案。

就我而言,我忘記導入我的 Extensionmethod 類的命名空間。即使頁面背後的程式碼包含命名空間,aspx-page 卻沒有。

我剛剛在 web.config 文件中添加了命名空間:

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

瞧!

引用自:https://stackoverflow.com/questions/372382