2011-11-03 17 views
12

Como dice la pregunta, ¿es posible usar un ActionLink que contenga un elemento y, de no ser así, cuál es la mejor manera de lograrlo?¿Es posible usar un ActionLink que contenga un elemento?

Por ejemplo, digamos que tengo un elemento Span, quiero que todo lo que hay que ser un hipervínculo ... Los siguientes obras:

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

Imagínese que box5 span class/css hace que este gran .. Originalmente era un DIV, pero encontré que no seguía los estándares y parece que esto está bien.

Esto funciona y funciona bien, pero, ¿hay alguna forma de usar un ActionLink en su lugar? He tratado de adivinar la sintaxis como (copiando de formas):

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

y muchas otras combinaciones sin ninguna suerte.

Ahora, mi solución HTML manual funciona bien y estoy contento de dejarla, pero, ¿es posible usar MVC ActionLink, y si es así, debería preocuparme/¿habría algún beneficio?

Respuesta

28

Sólo tiene que utilizar @Url.Action lugar:

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

fue útil, thx – Pyrejkee

1

No se puede especificar una etiqueta html dentro de actionlink, pero puedo sugerirle dos soluciones: 1 extienda el actionlink con su función. De modo que también puede implementar actionlink que genere href con otra etiqueta htmal dentro (img o span como en su caso)

2 usando url.content en href. Es como si tu solución real, pero mejor porque utiliza las reglas que ha definido en el Global.asax en lugar de utilizar "cadena mágica"

5

Hay un corte que puede utilizar para evitar la limitación

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

es no elegante, pero hace el trabajo

+1

use la sugerencia de Michael Stum, pero mantenga este truco en su bolsillo trasero, puede ser útil cuando use Ajax.ActionLink – Jason

+0

+1 ciertamente - No lo hice Quiero editar/reformular la pregunta después de obtener la respuesta, pero he decidido que quiero que estos enlaces sean Ajax y parece que esta solución funciona (después de quedarse toda la mañana) ... entonces, + 1/respuesta a Michael, pero +1 a ti también. – Wil

+0

No estoy seguro si lo estoy haciendo mal, pero, simplemente se presenta como texto ... Supongo que la afeitadora está haciendo lo suyo detrás de escena. Encerrarlo todo en '@ Html.Raw()' parece ser el truco ... Al principio, esto parece confuso, ¡pero es increíble! – Wil

0

Apenas escriba un <span> </span> d entre el lapso use el método @html> ActionLink Funcionará

+0

Creo que el póster original quería una forma de incluir solo una parte del texto del enlace dentro del lapso - en otras palabras, el está anidado en el y no al revés. – bdesham

Cuestiones relacionadas