Domanda

In una vista MVC ASP.NET vorrei includere un collegamento del modulo:

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

Cercare di includere l'elemento <span> nel campo linkText di una chiamata a Html.ActionLink() finisce per essere codificato (come ci si aspetterebbe).

Esistono modi consigliati per raggiungere questo obiettivo?

È stato utile?

Soluzione

Puoi usare Url.Action per creare il link per te:

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

o usa Html.BuildUrlFromExpression:

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

Altri suggerimenti

se ti piace usare Razor, questo dovrebbe funzionare:

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

Un'altra opzione è quella di rendere il link dell'azione a un MvcHtmlString come di consueto, usando HTML.ActionLink o Ajax.ActionLink (a seconda del contesto), quindi scrivere una classe che prende il MvcHtmlString renderizzato e compromette il testo del collegamento HTML direttamente nel MvcHtmlString già reso e restituisce un altro MvcHtmlString.

Quindi questa è la classe che lo fa: [si noti che il codice di inserimento / sostituzione è MOLTO semplice e potrebbe essere necessario potenziarlo per gestire più html nidificati]

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 poi lo useresti nella vista in questo modo:

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

Questo approccio ha il vantaggio di non dover riprodurre / comprendere il processo di rendering dei tag.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top