Asp.Net Core 2.1.0-preview1-final:@ Html.ActionLink()不适用于string.Format()

时间:2018-09-21 13:26:56

标签: razor asp.net-core-mvc asp.net-core-2.1

<div data-collapse class="left-justify" id="requirements">
  @Html.Raw(string.Format(@_stringLocalizer["RegisterNoticeMessage"], @Html.ActionLink(@_stringLocalizer["RegisterLinkDisplayName"], "Register")))
</div>

在这段代码中, @ Html.ActionLink()返回 Microsoft.AspNetCore.Mvc.Rendering.TagBuilder ,而不是返回包含URL路径的锚元素。指定的动作。 在 string.Format()中使用 @ Html.ActionLink()的正确方法是什么。或者,我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

助手方法Html.ActionLink始终返回TagBuilder对象。将此类对象传递到string参数时,将调用ToString()方法,从而产生观察到的输出(类名称:“ Microsoft.AspNetCore.Mvc.Rendering.TagBuilder”)。 / p>

在我看来,您正在尝试以一种非常怪异的方式创建超链接。您是否尝试过使用Url.Action辅助方法?此方法返回一个普通的旧string,可以插入任何href属性。

例如该代码将等效于您要实现的目标:

@Html.Raw(
    string.Format(_stringLocalizer["RegisterNoticeMessage"], 
    "<a href=\"" + Url.Action("Register") + "\">" + _stringLocalizer["RegisterLinkDisplayName"] + "</a>")
)

侧注:

  • 有可能获得TagBuilder的string值,如this中所述。
  • 当您已经在Razor / C#上下文中工作时,无需重复@
  • 使用Html.Raw时要格外小心,因为它可能会导致XSS漏洞。