簡體   English   中英

如何將錨標記HTML鏈接轉換為使用@ Html.ActionLink

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM