当前位置:  开发笔记 > 后端 > 正文

带有Image的ASP.NET MVC Ajax.ActionLink

如何解决《带有Image的ASP.NETMVCAjax.ActionLink》经验,为你挑选了6个好方法。

无论如何,有一个图像充当ajax actionlink?我只能使用文本来使用它.谢谢你的帮助!



1> Black Horus..:

来自他的Contact manger 项目的 Stephen Walthe

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

}

您现在可以输入您的aspx文件:

<%= Ajax.ImageActionLink("../../Content/Delete.png", "Delete", "Delete", new { id = item.Id }, new AjaxOptions { Confirm = "Delete contact?", HttpMethod = "Delete", UpdateTargetId = "divContactList" })%> 


除此之外,在上面的代码示例链接中将没有方法Replace作为可用选项.您需要先调用ToString()或ToHtmlString()才能调用Replace().

2> Neal Stublen..:

这是我发现的最简单的解决方案:

<%= Ajax.ActionLink("[replacethis]", ...).Replace("[replacethis]", "" %>

Replace()调用用于将img标记推送到操作链接.您只需使用"[replaceme]"文本(或任何其他安全文本)作为临时占位符来创建链接.


我尝试使用上面的代码(在.Replace"之前使用.ToHtmlString())并且它没有做到这一点.它只是抛出整个字符串.这在mvc3中有所改变,还是我错过了什么?
@ PedroC88你可以用Html.Raw(...)包装它,Razor不会对它进行编码

3> Arjan Einbu..:

这是对Black Horus回答的Razor/MVC 3(及更高版本)更新:

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

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

}

您现在可以输入.cshtml文件:

@Ajax.ImageActionLink("../../Content/Delete.png", "Delete", "Delete", new { id = item.Id }, new AjaxOptions { Confirm = "Delete contact?", HttpMethod = "Delete", UpdateTargetId = "divContactList" })

2013年10月31日:更新了一个额外的参数,以允许为图像元素设置其他HTML属性.用法:

@Ajax.ImageActionLink("../../Content/Delete.png", "Delete", "Delete", new { id = item.Id }, new AjaxOptions { Confirm = "Delete contact?", HttpMethod = "Delete", UpdateTargetId = "divContactList" }, new{  })



4> frantisek..:

另一种解决方案是创建自己的扩展方法:

ActionLink(this HtmlHelper helper, Expression> action, string linkText, object htmlAttributes, LinkOptions options)

最后一个参数是枚举LinkOptions

[Flags]
public enum LinkOptions
{
    PlainContent = 0,
    EncodeContent = 1,
}

然后你可以按如下方式使用它:

Html.ActionLink(
     c => c.Delete(item.ID), "X",
     new { Class = "none left" }, 
     LinkOptions.PlainContent)

我将在我的博客上发布此解决方案的完整描述:http://fknet.wordpress.com/



5> MrJavaGuy..:

简短的回答是不可能的.你可以选择编写自己的扩展方法来拥有一个ImageActionLink,而不是很难做到.或者向actionLink添加一个属性,并将innerhtml替换为image标签.



6> 小智..:

请参阅http://asp.net/mvc上的版本7 Contact Manager Tutorial .Stephen Walther有一个创建Ajax.ActionLink的例子,它是一个图像.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有