2011-11-03 16 views
12

Come dice la domanda, è possibile utilizzare un ActionLink che contiene un elemento e, in caso contrario, qual è il modo migliore per ottenerlo?È possibile utilizzare un ActionLink che contiene un elemento?

Per esempio, Diciamo che ho un elemento Span, voglio che il tutto sia un collegamento ipertestuale ... le seguenti opere:

<a href="/Site/Page/@Model.ID?Type=test"> 
       <span class="box5">Click anywhere in this box</span> </a> 

Immaginate che span class/css box5 rende questo grande .. Era originariamente un DIV, ma, ho scoperto che non seguiva gli standard e questo sembra seguire ok.

Questo esegue il rendering e funziona correttamente, ma è comunque necessario utilizzare ActionLink? Ho cercato di indovinare la sintassi come (copia dai moduli):

@using (Html.Actionlink){<span class="box5">Click anywhere in this box</span>} 

e molte altre combinazioni senza fortuna.

Ora, la mia soluzione manuale HTML funziona perfettamente e sono felice di lasciarlo, ma è possibile utilizzare MVC ActionLink e, in caso affermativo, dovrei anche preoccuparmi/ci sarebbero dei vantaggi?

risposta

28

Basta usare @Url.Action invece:

<a href="@Url.Action("Page","Site", new { id = Model.Id, @Type = "test" })"> 
<span class="box5">Click anywhere in this box</span> </a> 
+0

è stato utile, grazie a – Pyrejkee

1

Non è possibile specificare un tag html all'interno di actionlink, ma posso suggerirvi due soluzioni: 1 estendere il link di azione con la vostra funzione. Quindi puoi anche implementare actionlink che generano href con altri tag htmal all'interno (img o span come nel tuo caso)

2 utilizzando url.content in href. E 'come la vostra soluzione attuale, ma meglio perché si utilizzano le regole che avete definito nel Global.asax invece di usare "stringa magica"

5

C'è un hack è possibile utilizzare per aggirare la limitazione

@Html.Raw(
    Html 
     .ActionLink("-replace-me-", .....) 
     .ToString() 
     .Replace(
       "-replace-me-", 
       @"<span class=""box5"">Click anywhere in this box</span>")) 

è non elegante, ma non il lavoro

+1

usa il suggerimento di Michael Stum, ma tieni questo hack nella tasca posteriore, può tornare utile quando usi Ajax.ActionLink – Jason

+0

+1 di certo - I didn ' t voglio modificare/riformulare la domanda dopo aver ottenuto la risposta, ma, ho deciso che voglio che questi siano collegamenti Ajax e, sembra che questa soluzione funzioni (dopo essere stata bloccata tutta la mattina) ... quindi, + 1/risposta a Michael, ma anche a te. – Wil

+0

Non sono sicuro se sto sbagliando, ma si limita a rappresentare il testo ... Immagino che il rasoio stia facendo le cose dietro le quinte. Il fatto di racchiudere tutto in '@ Html.Raw()' sembra fare il trucco ... All'inizio questo sembra confuso, ma è incredibile! – Wil

0

Basta scrivere <span> </span> un d tra lo span usa il metodo @html> ActionLink Funzionerà

+0

Penso che il poster originale volesse un modo per includere solo parte del testo del collegamento all'interno dello span: in altre parole, lo è nidificato nello e non viceversa. – bdesham

Problemi correlati