Criar um ActionLink com elementos HTML no texto do link
-
03-07-2019 - |
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?
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.