如何转换锚标记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.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中的其他任何地方