2010-07-31 4 views
2

J'essaie d'ajouter une méthode d'extension à mon projet MVC 2 sans succès et après plusieurs heures de googling et en regardant ici, je suis à perte. J'ai créé un tout nouveau projet MVC 2 pour m'assurer qu'il n'y avait rien de bizarre dans mon projet existant et je suis toujours confronté au même problème. Je suis sûr que c'est une situation où je "ne peux pas voir la forêt pour les arbres" alors toute aide serait grandement appréciée. Voici le code de la méthode d'extension.UrlHelper méthode d'extension ne fonctionne pas

using System.Web.Mvc; 

namespace ExtensionTest.Helper 
{ 
    public static class UrlExtensions 
    { 
     public static string Image(this UrlHelper helper, string fileName) 
     { 
      return helper.Content("~/Content/Images/" + fileName); 
     } 

    } 
} 

et voici le code dans la vue (affichage standard index de la maison créée par défaut pour un nouveau MVC 2 projet)

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 
<%@ Import Namespace="ExtensionTest.Helper" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <%= UrlHelper.Image("test") %> 
    <h2><%: ViewData["Message"] %></h2> 
    <p> 
     To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. 
    </p> 
</asp:Content> 

En mode conception, quand je tape UrlHelper, IntelliSense ne montre pas ma méthode d'extension image et si je lance le projet, je reçois l'erreur suivante:

CS0117: 'System.Web.Mvc.UrlHelper' does not contain a definition for 'Image' 

au début, je pensais que c'était aussi simple que de ne pas ajouter une référence (déclaration d'importation), mais cela ne semble pas être le cas. La chose vraiment étrange pour moi est que je peux ajouter des méthodes d'extension à l'objet HtmlHelper sans problème dans ce même projet.

Merci d'avance pour toute aide fournie.

+0

Je n'ai pas de solution immédiate sans essayer un test à construire au cours d'une journée bien remplie ... mais avez-vous essayé de renommer la fonction d'aide à quelque chose apparemment moins commun/évident que "Image" ... peut-être "MyImage" ou "TestImage" pour voir si les résultats diffèrent? – JcMaltaDev

Répondre

1

Les méthodes d'extension dans .NET doivent être appelées sur une instance d'objet et non sur la classe elle-même (même si elles sont statiques).

Ainsi, au lieu de:

<%= UrlHelper.Image("test") %> 

essayer:

<%= Url.Image("test") %> 
+0

LOL! Certainement un manquant de la forêt pour le scénario des arbres. C'est embarrassant ... Merci! –