2010-07-30 5 views
1

Je suis assez nouveau à Mvc et a rencontré un problème en essayant d'utiliser une image comme un lien Action Ajax. J'ai trouvé une aide que je crois, a été publié par Stephen Walther ...Asp.net Mvc2 Ajax Aide ImageActionLink

using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 

namespace Helpers 
{ 
    public static class ImageActionLinkHelper 
    { 

     public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string altText, string actionName, object routeValues, AjaxOptions ajaxOptions) 
     { 
      var builder = new TagBuilder("img"); 
      builder.MergeAttribute("src", imageUrl); 
      builder.MergeAttribute("alt", altText); 
      var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions); 
      return link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing)); 
     } 

    } 
} 

Cependant la méthode « Remplacer » n'existe pas dans la version que je utilise. (peut-être un problème Mvc2 puisque je crois que son application de gestionnaire de contacts était une application MVC1 ??) Une recherche rapide dans les docs et j'ai trouvé la méthode "Remplacer" comme obsolète et il a été suggéré d'utiliser "MvcHtmlString.Create()" J'ai essayé un certain nombre de combinaisons dans cette aide en utilisant cette méthode et je ne pouvais pas obtenir le lien pour rendre avec une image. J'obtiendrais soit un lien pointant vers l'action/le contrôleur correct et la balise img en texte brut, soit vice versa, un rendu correctement img avec le lien en texte brut. Juste comme un sidenote sur presque tous les combos que j'ai essayés, je retournais un type MvcHtmlString au lieu de la chaîne standard énumérée dans cette aide particulière.

Répondre

3

Ceci est probablement à partir de quand MvcHtmlString n'existait pas encore. Vous devriez être en mesure de faire ce travail avec Replace() méthode tho, juste besoin pour obtenir la chaîne réelle, il était censé travailler avec en premier lieu:

var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions).ToString(); 
return link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing)); 
+0

Quand j'ajoute l'assistant, le projet de construire l'habitude parce qu'il dit La méthode Replace() n'existe pas. –

+0

Oui, c'est ce que j'ai dit. Vous devez appeler 'ToString()' sur le résultat que vous obtenez 'helper.ActionLink()'. – Necros

+0

Je suis désolé, je n'ai pas vu le ToString() à la fin de votre première ligne, fonctionne vraiment maintenant! Merci! –