Asp.Net Core 2.1.0-preview1-final: @ Html.ActionLink () не работает для string.Format () - PullRequest
0 голосов
/ 21 сентября 2018
<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 () .Или я что-то здесь упустил?

1 Ответ

0 голосов
/ 25 сентября 2018

Вспомогательный метод 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>")
)

Sidenotes:

  • Это возможно возможно получить значение string TagBuilder, как показано в этом сообщении.
  • Нет необходимости повторять@, когда вы уже работаете в контексте Razor / C #.
  • Будьте предельно осторожны при использовании Html.Raw, так как это может привести к уязвимости XSS.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...