Asp.net Mvc2 Ajax ImageActionLink Helper

时间:2010-07-30 23:27:49

标签: c# asp.net-mvc-2 asp.net-ajax actionlink

我是Mvc的新手并遇到问题尝试使用Image作为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与链接作为纯文本。

就像我试过的几乎所有组合的旁注一样,我返回的是一个MvcHtmlString类型,而不是这个特定帮助器中列出的标准字符串。

1 个答案:

答案 0 :(得分:3)

这可能是从MvcHtmlString尚不存在的时候开始的。您应该能够使用Replace()方法使其工作,只需要获取它应该首先使用的实际字符串:

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