【问题标题】:Asp.net Mvc2 Ajax ImageActionLink HelperAsp.net Mvc2 Ajax ImageActionLink 助手
【发布时间】:2011-03-23 12:12:19
【问题描述】:

我是 Mvc 的新手,在尝试使用 Image 作为 Ajax Action 链接时遇到了问题。我找到了一个助手,我相信它是由 Stephen Walther 发布的……

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 类型,而不是此特定帮助程序中列出的标准字符串。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 当我添加助手时,项目不会构建,因为它说 Replace() 方法不存在。
    • 是的,我就是这么说的。您必须根据从 helper.ActionLink() 获得的结果调用 ToString()
    • 对不起,我没有在你的第一行末尾看到 ToString(),现在肯定可以了!谢谢!
    • 甜蜜。这解决了我从 MVC1 到 MVC2 的问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-09-22
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多