12

J'ai une méthode simple d'extension du type int afin que je puisse faire ce qui suit:Comment appeler des méthodes d'extension à l'aide Eval dans un contrôle lié aux données

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

Cela fonctionne très bien dans le code, mais je veux utiliser méthode d'extension dans un modèle de répéteur. Quand databinding Je veux faire ce qui suit:

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

qui ne fonctionnait pas si j'ai essayé:

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

et il ne fonctionne toujours pas. Le compilateur JIT ne voit pas ma méthode d'extension et j'ai la déclaration d'importation appropriée dans la page. La seule idée pour résoudre cela est de remplacer l'Eval par un contrôle Literal et d'appeler la méthode d'extension dans le code-behind, mais de toute façon, j'aimerais quand même savoir pourquoi cela ne fonctionne pas. travail

Merci

Répondre

6

On dirait que je peux répondre à ma propre question! Asp.Net compilait les modèles .aspx, .ascx en utilisant le compilateur .Net 2.0. Je avais besoin d'ajouter ce qui suit à mon web.config pour le faire fonctionner

<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> 

Je dois encore effectuer la distribution à (int) dans le Eval, mais au moins fait sens pour moi.

+0

C'était * exactement * ce que je cherchais - merci tas! –

0

Est-ce que Eval ("LengthInSeconds") par lui-même?

+0

Oui, cela vient de renvoyer l'int sous forme de chaîne. –

9

J'ai eu le même problème, et finalement trouvé la solution.

Dans mon cas, j'avais oublié d'importer l'espace de noms de ma classe Extensionmethod. Même si le code derrière la page incluait l'espace de noms, la page aspx ne l'a pas fait.

Je viens d'ajouter l'espace de noms dans le fichier web.config:

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

et le tour est joué !!

+0

lien pour la documentation http://msdn.microsoft.com/en-us/library/ms164642.aspx et par exemple:

0

La déclaration d'espace de noms est faite sous l'élément pages dans le fichier web.config comme ceci:

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

Une autre solution pour moi résolu (ce qui est similaire à Patrik de), est d'importer tout l'espace de noms sur cette page de contrôle spécifique ou aspx.

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

Cette solution était plus appropriée avec mon problème car les méthodes d'extension étaient seulement pour une classe utilisée dans un contrôle.

Questions connexes