要在可翻译文本中创建网址,我们使用{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"
但是这会将转义后的字符串打印到源代码中:<a href="/Login/Login?UserName=alberttest3&amp;UniqueId=f3647fed-bab4-4575-bb5f-98ed27edff43">label-RequestNewOfficeWizard</a>
如何确保它不会显示html-tag,而是显示URL?
答案 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 })