Создать ActionLink с элементами HTML в тексте ссылки - PullRequest
33 голосов
/ 31 декабря 2008

В виде ASP.NET MVC я хотел бы включить ссылку в виде:

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

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

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

Ответы [ 3 ]

51 голосов
/ 31 декабря 2008

Вы можете использовать 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>
41 голосов
/ 17 сентября 2012

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

<a href="@Url.Action("Action", "Controller")">link text <span>with further blablah</span></a>
0 голосов
/ 16 ноября 2012

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

Преимущество этого подхода заключается в отсутствии необходимости воспроизводить / понимать процесс рендеринга тегов.

...