2010-07-30 1 views
1

Я довольно новичок в Mvc и столкнулся с проблемой, пытающейся использовать изображение как ссылку Ajax Action. Я нашел помощника, который я считаю, был вывешен Стивен Walther ...Asp.net Mvc2 Ajax ImageActionLink Helper

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)); 
     } 

    } 
} 

Однако метод «Заменить» не существует в версии я использую. (возможно, проблема с Mvc2, так как я считаю, что его приложение для менеджера контактов было MVC1-приложением?) Быстрый поиск по документам, и я нашел метод «Заменить» устаревшим, и было предложено использовать «MvcHtmlString.Create()» Я попробовал несколько комбинаций в этом помощнике, используя этот метод, и я не смог получить ссылку для рендеринга с изображением. Я бы либо получил ссылку, указывающую на правильное действие/контроллер, и тег img как обычный текст ИЛИ наоборот правильно отображаемый img со ссылкой как простой текст.

Как и в случае сбоя почти всех комбо, которые я пытался, я возвращал тип MvcHtmlString вместо стандартной строки, указанной в этом конкретном помощнике.

ответ

3

Возможно, с того момента, когда MvcHtmlString еще не существовало. Вы должны быть в состоянии сделать эту работу с Replace() методом Тхо, просто нужно, чтобы получить реальную строку она должна была работать в первую очередь:

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

Когда я добавить помощника, проект обыкновение строить, потому что он говорит Метод Replace() не существует. –

+0

Да, это то, что я сказал. Вы должны вызвать 'ToString()' на результат, полученный из 'helper.ActionLink()'. – Necros

+0

Прошу прощения, я не видел ToString() в конце вашей первой строки, определенно работает сейчас! Спасибо! –