Asp.Net Core 2.1.0-preview1-final: @Html.ActionLink() не работает для string.Format()

<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 к указанному действию. Как правильно использовать @Html.ActionLink() в string.Format(). Или я что-то пропустил, здесь?


person Raghu M U    schedule 21.09.2018    source источник


Ответы (1)


Вспомогательный метод Html.ActionLink всегда возвращает объект TagBuilder. Когда вы передаете такой объект в параметр string, будет вызван метод ToString(), что приведет к наблюдаемому результату (имя класса: «Microsoft.AspNetCore.Mvc.Rendering.TagBuilder»).

Мне кажется, вы пытаетесь создать гиперссылку довольно странным образом. Вы пробовали использовать вспомогательный метод Url.Action? Этот метод возвращает старый добрый string, готовый к подключению к любому атрибуту href.

Например. этот код будет эквивалентен тому, чего вы пытаетесь достичь:

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

Примечания:

  • Возможно получить значение string TagBuilder, как показано в этот пост.
  • Нет необходимости повторять @, если вы уже работаете в контексте Razor/C#.
  • Будьте предельно осторожны при использовании Html.Raw, так как это может привести к XSS-уязвимостям.
person Sigge    schedule 24.09.2018