12

我有int類型的簡單擴展方法使用eval,所以我可以做的工作如何調用擴展方法如下:在數據綁定控件

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

此作品在代碼很大,但我想用這個Repeater模板中的擴展方法。綁定時我要做到以下幾點:

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

這並沒有工作,所以我嘗試:

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

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

我唯一的想法是解決這個問題是用Literal控件替換Eval並在代碼隱藏中調用擴展方法,但無論如何,我仍然想知道爲什麼這不起作用。

感謝

回答

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> 

我還是要執行的評估和演示投給(INT),但至少對我來說很有意義。

+0

這是*正是*我正在尋找 - 謝謝堆! – 2010-10-03 21:30:02

0

確實的eval( 「LengthInSeconds」)本身的工作?

+0

是的,那只是返回int形式的字符串。 – 2008-12-16 19:49:55

9

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

在我的情況下,我忘了導入我的Extensionmethod類的命名空間。即使頁面後面的代碼包含名稱空間,aspx頁面也沒有。

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

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

,瞧!

+0

鏈接,文檔http://msdn.microsoft.com/en-us/library/ms164642.aspx 和例如: <頁面主題= 「默認」> <添加命名空間=「MyExample.Example.Web 「/> 2010-01-15 14:57:29

0

的命名空間聲明的頁面元素下完成的web.config文件是這樣的:

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

另一種解決方案,解決了這個問題對我來說(這類似於帕特里克的),是剛剛導入命名空間在特定的控件或aspx頁面上。

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

這個解決方案更適合我的問題,因爲擴展方法只適用於一個控件中使用的類。