如何逃离html.actionLink<;a></a>;字符串格式的标记

本文关键字:gt lt 字符串 格式 何逃离 actionLink html 逃离 | 更新日期: 2023-09-27 17:57:36

要在可翻译文本中创建URL,我们使用{0}作为占位符。

所以我们这样做:

@string.Format(@translationHelper.GetTranslation("label-ClickToContinue"),
    @Html.ActionLink(
        @translationHelper.GetTranslation("text-here"),
               "Login",
               new { Model.UserName, Model.UniqueId }
    )
)

翻译密钥:

label-ClickToContinue = "Click {0} to continue"
text-here = "here"

但这会将转义字符串打印到源中:&lt;a href="/Login/Login?UserName=alberttest3&amp;amp;UniqueId=f3647fed-bab4-4575-bb5f-98ed27edff43"&gt;label-RequestNewOfficeWizard&lt;/a&gt;

如何确保它不会显示html标签,而是显示URL?

如何逃离html.actionLink<;a></a>;字符串格式的标记

只需将string.Format()的输出放入Html.Raw()中即可,如下所示:

@Html.Raw(string.Format(@translationHelper.GetTranslation("label-ClickToContinue"),
       @Html.ActionLink(
            @translationHelper.GetTranslation("text-here"),
            "Login",
            new { Model.UserName, Model.UniqueId }
       )
))

翻译密钥:

label-ClickToContinue = "Click {0} to continue"
text-here = "here"

ActionLink助手不支持此操作。它总是对文本进行HTML编码。你可以编写自己的自定义助手,不编码文本,也可以简单地:

<a href="@Url.Action(Login, new { UserName, Model.UniqueId })">
    @Html.Raw(translationHelper.GetTranslation("text-here"))
</a>

顺便说一下,现在我已经发布了这个代码,它看起来很难看。继续写一个自定义助手:

public static class HtmlExtensions
{
    public static IHtmlString ActionLinkLocalized(
        this HtmlHelper html, 
        string translationText, 
        string actionName, 
        object routeValues
    )
    {
        var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
        var anchor = new TagBuilder("a");
        anchor.Attributes["href"] = urlHelper.Action(actionName, routeValues);
        anchor.InnerHtml = TranslationHelper.GetTranslation(translationText);
        return new HtmlString(anchor.ToString());
    }
}

在你看来,简单地说:

@Html.ActionLinkLocalized("text-here", "Login", new { UserName, Model.UniqueId })