Подтвердить что ты не робот

Создайте ActionLink с элементами HTML в тексте ссылки.

В представлении ASP.NET MVC я хотел бы включить ссылку формы:

<a href="blah">Link text <span>with further descriptive text</span></a>

Попытка включить элемент <span> в поле linkText вызова Html.ActionLink() заканчивается тем, что он закодирован (как и ожидалось).

Есть ли какие-либо рекомендуемые способы достижения этого?

4b9b3361

Ответ 1

Вы можете использовать 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>

Ответ 2

если вам нравится использовать Razor, это должно работать:

<a href="@Url.Action("Action", "Controller")">link text <span>with further blablah</span></a>

Ответ 3

Другой вариант - показать ссылку на действие в 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>")

Этот подход имеет то преимущество, что ему не нужно воспроизводить/понимать процесс рендеринга тегов.