我正在进行本地化项目,需要转换锚标记以使用@ 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 … candidates are …
如果我需要提供更多信息,请发表评论,我会提供.我从未将这种复杂的锚标记转换为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));
}
(从内存中,所以我肯定需要解决一些问题)