Создайте ActionLink с элементами HTML в тексте ссылки.
-
03-07-2019 - |
Вопрос
В представлении ASP.NET MVC я хотел бы включить ссылку вида:
<a href="blah">Link text <span>with further descriptive text</span></a>
Пытаюсь включить <span>
элемент в linkText
поле вызова Html.ActionLink()
в конечном итоге он кодируется (как и следовало ожидать).
Есть ли какие-либо рекомендуемые способы достижения этого?
Решение
Вы можете использовать Url.Action для создания ссылки:
<a href="<% =Url.Action("Action", "Controller")%>">link text <span>with further blablah</span></a>
или используйте Html.BuildUrlFromExpression:
<a href="<% =Html.BuildUrlFromExpression<Controller>(c => c.Action()) %>">text <span>text</span></a>
Другие советы
если вам нравится использовать Razor, это должно сработать:
<a href="@Url.Action("Action", "Controller")">link text <span>with further blablah</span></a>
Другой вариант — отобразить ссылку действия в MvcHtmlString как обычно, используя либо HTML.ActionLink, либо Ajax.ActionLink (в зависимости от вашего контекста), а затем написать класс, который принимает визуализированную MvcHtmlString и взломает текст вашей html-ссылки непосредственно в уже обработанная MvcHtmlString и возвращает другую MvcHtmlString.
Итак, это класс, который делает это:[обратите внимание, что код вставки/замены ОЧЕНЬ прост, и вам, возможно, придется его усовершенствовать, чтобы он мог обрабатывать больше вложенных HTML]
namespace Bonk.Framework
{
public class CustomHTML
{
static public MvcHtmlString AddLinkText(MvcHtmlString htmlString, string linkText)
{
string raw = htmlString.ToString();
string left = raw.Substring(0, raw.IndexOf(">") + 1);
string right = raw.Substring(raw.LastIndexOf("<"));
string composed = left + linkText + right;
return new MvcHtmlString(composed);
}
}
}
И тогда вы бы использовали его в представлении следующим образом:
@Bonk.Framework.CustomHTML.AddLinkText(Ajax.ActionLink("text to be replaced", "DeleteNotificationCorporateRecipient"), @"Link text <span>with further descriptive text</span>")
Преимущество этого подхода состоит в том, что ему не нужно воспроизводить/понимать процесс рендеринга тегов.