如何在string.format中转义html.actionLink <a></a>标记

时间:2013-02-05 12:23:31

标签: c# asp.net asp.net-mvc

要在可翻译文本中创建网址,我们使用{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-tag,而是显示URL?

2 个答案:

答案 0 :(得分:1)

很容易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"

答案 1 :(得分:0)

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