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

StackOverflow https://stackoverflow.com/questions/402605

  •  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>")

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top