Asp.net
如何在數據綁定控制項中使用 Eval 呼叫擴展方法
我對 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>瞧!