Asp.net Mvc2 Ajax ImageActionLink Helper - PullRequest
1 голос
/ 31 июля 2010

Я довольно новичок в Mvc и столкнулся с проблемой, пытаясь использовать изображение в качестве ссылки Ajax Action. Я нашел помощника, которого, как мне кажется, написал Стивен Уолтер ...

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 со ссылкой в ​​виде простого текста.

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

1 Ответ

3 голосов
/ 31 июля 2010

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

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