如何转换锚标记HTML链接使用@Html.ActionLink

本文关键字:链接 HTML ActionLink @Html 何转换 转换 | 更新日期: 2023-09-27 18:07:17

我正在做一个本地化项目,我需要转换一个锚标记来使用@Html.ActionLink

我有这个html帮助器:

@helper RenderIcon(bool condition, string @class, string title, string url, bool openInNewWindow = false)
{
    if (condition)
    {
        <a href="@(new MvcHtmlString(url))" @(openInNewWindow ? " target='_blank'" : "")>
            @(this.RenderIconSpan(@class, title))
        </a>
    }
}

我想到了这个:

        @Html.ActionLink(this.RenderIconSpan(@class, title), url, null, openInNewWindow ? new { target="_blank" } : null)

但是我得到这个错误:

Cannot resolve method…候选人是…

如果我需要提供更多的信息,请评论,我会提供。我从来没有将锚标记转换成ActionLink,我不确定三元运算符是否正确,以及我所做的一切。

如何转换锚标记HTML链接使用@Html.ActionLink

您不能使用开箱即用的Html.ActionLink函数嵌套元素。您必须创建一个重载,它接受类似MvcHtmlString的东西并将其插入锚。

public static IHtmlString ActionLink(this HtmlHelper html, IHtmlString innerHtml, string action, string controller, IDictionary<string, object> htmlAttributes)
{
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
    var tag = new TagBuilder("a");
    tag.MergeAttributes(htmlAttributes);
    tag.MergeAttribute("href", urlHelper.Action(action, controller));
    return new HtmlString(tag.ToString(TagRenderMode.Normal));
}

这里是Hack(低和脏)的解决方案,如果你需要使用ajax或一些功能,你不能使用手动创建链接时(使用标签):

<%= Html.ActionLink("LinkTextToken", "ActionName", "ControllerName").ToHtmlString().Replace("LinkTextToken", "Refresh <span class='large sprite refresh'></span>")%>

你可以使用任何文本代替'LinkTextToken',它只是被替换,它只重要的是,它不会发生在actionlink中的其他任何地方