[英]How to convert anchor tag HTML links to use @Html.ActionLink
我正在开发本地化项目,我需要将锚标记转换为使用@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)
但我得到这个错误:
无法解决方法......候选人是......
如果我需要提供更多信息,请发表评论,我会提供。 我从来没有将这个复合体的锚标签转换为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内的任何其他地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.