2009-06-03 7 views
3

J'ai une méthode d'extension à HtmlHelper:Problème créer ma propre extension HtmlHelper

<%= Html.MyMethod(params)%> 

Il travaille en studio visuel, mais jette (à l'exécution):

compilateur Message d'erreur: CS0117: « System.Web.Mvc.HtmlHelper » ne contient pas de définition pour « MyMethod »

Le peu bizarre est que cela fonctionne:

<%= HtmlHelperExtensions.MyMethod(Html, params) %> 

Pourquoi ma méthode ne fonctionne-t-elle pas comme une extension, mais fonctionne-t-elle comme un appel statique normal?

+0

Quelle version du framework utilisez-vous? Pourriez-vous également montrer la signature des méthodes d'assistance? –

+0

C'est une méthode simple, quelque chose comme: public static class HtmlHelperExtensions {public static string Localiser (ce HtmlHelper htmlHelper, clé de chaîne, params string [] args) ... – Keith

+0

Je pense que je suis sur la dernière version corrigée. – Keith

Répondre

7

J'ai trouvé la réponse dans le web.config - il y a une section qui lui indique comment compiler C# intégré dans HTML:

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" 
        extension=".cs" 
        type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     </compiler> 
    </compilers> 
</system.codedom> 

Ce manque un indicateur supplémentaire qui indique d'utiliser les astuces 3.5 du compilateur qui permettent des méthodes d'extension et types anonymes travaillent dans le code HTML:

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" 
        extension=".cs" 
        type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
      <providerOption name="CompilerVersion" value="v3.5" /> 
     </compiler> 
    </compilers> 
</system.codedom> 
2

Assurez-vous d'importer l'espace de noms contenant la méthode d'extension dans votre vue.

<%@ Import Namespace="MyProject.MyExtensions"%> 

Ou ajoutez dans votre web.config il sera disponible sur tous les plans:

 <namespaces> 
      <add namespace="System.Web.Mvc"/> 
      <add namespace="System.Web.Mvc.Ajax"/> 
      <add namespace="System.Web.Mvc.Html"/> 
      <add namespace="System.Web.Routing"/> 
      <add namespace="MyProject.MyExtensions"/> 
     </namespaces> 
+0

Merci, c'est utile, mais pas ça. Si tel était le problème, l'appel statique (HtmlHelperExtensions.MyMethod) ne fonctionnerait pas non plus. – Keith

Questions connexes