转换锚标记HTML链接以使用@ 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)

但是我得到这个错误:

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

(从内存中,所以我肯定需要解决一些问题)

上一篇:c#-MVC发布页面部分-模型绑定失败


下一篇:通过JavaScript从视图MVC发布多个参数