Pergunta

Em um MVC ASP.NET ver eu gostaria de incluir um link do formulário:

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

Tentando incluem o elemento <span> no campo linkText de uma chamada para Html.ActionLink() termina-se com ela a ser codificado (como seria esperado).

Existem maneiras recomendadas de alcançar este objectivo?

Foi útil?

Solução

Você pode usar Url.Action para construir o link para você:

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

ou uso Html.BuildUrlFromExpression:

<a href="<% =Html.BuildUrlFromExpression<Controller>(c => c.Action()) %>">text <span>text</span></a>

Outras dicas

Se você gosta de usar Navalha, isso deve funcionar:

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

Outra opção é tornar o seu link de ação a um MvcHtmlString como por normal, usando Html.ActionLink, ou Ajax.ActionLink (dependendo do contexto), em seguida, escrever uma classe que leva o MvcHtmlString prestados e hacks seu link texto html diretamente no MvcHtmlString já prestados, e retorna outra MvcHtmlString.

Portanto, esta é a classe que faz isso: [Por favor note que o código de inserção / substituição é muito simples, e pode ser necessário reforçá-lo para lidar com mais aninhada 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);
        }
    }
}

E então você iria utilizá-lo na vista assim:

@Bonk.Framework.CustomHTML.AddLinkText(Ajax.ActionLink("text to be replaced", "DeleteNotificationCorporateRecipient"), @"Link text <span>with further descriptive text</span>")

Esta abordagem tem a vantagem de não ter de reproduzir / compreender o processo de renderização de tag.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top