2012-02-23 17 views
14

En la documentación de ASP.NET MVC dice que usted debe hacer algo como esto cuando tienen un enlace en una vistaVentajas de la maquinilla de afeitar reemplazan (@href)

<a href="@href("~/SubPage")">Subpage</a>. 

El motor de la maquinilla de afeitar reemplaza a @href("~/SubPage")/Subpage.

¿Cuál es la ventaja de hacerlo de esta manera en lugar

<a href="/SubPage">Subpage</a>. 

En casos como este y en otros (como la creación de un formulario) ¿por qué utilizar el motor de la maquinilla de afeitar en lugar de escribir directamente lo que quiere. Creo que es más rápido en el lado del servidor para imprimir algo directamente que permita que el motor lo genere.

Respuesta

24

Si la aplicación se ejecuta en una subcarpeta, la Navaja @href creará el enlace correcto de esta manera:

www.myapp.com/subfolder/SubPage 

Si se escribe por sí mismo su enlace será como esto y no va a funcionar:

www.myapp.com/SubPage 

Eso es porque ~ será reemplazado con la raíz de su aplicación por Navaja.

+0

Y si escribo el enlace directamente con la subcarpeta o la aplicación no está en una subcarpeta, ¿hay alguna ventaja? –

+6

No, no lo creo. Pero pierde flexibilidad: nunca puede cambiar el nombre de la subcarpeta sin buscar todo el proyecto donde escribió ese nombre. Disiento mucho a hacer eso. – Marc

+1

+ 1- esta pequeña joya (@href) es SOO pasada por alto por muchos desarrolladores (cuando no se usa @ Html.ActionLink()). le daría un doble voto si pudiera :) –

0

simplemente escribir

<a href="SubPage">Subpage</a>

no puedo realizar cualquier repliegue negativo

+1

Si ha definido rutas personalizadas, esto podría potencialmente romper los enlaces. Por ejemplo, si tengo una ruta personalizada 'a/b/c' mapeada a la acción' SubPage' del 'PageController' y mi enlace href es' OtherPage', el navegador navegará a 'a/b/OtherPage' aunque , en este contexto, el objetivo previsto probablemente sería 'Page/OtherPage'. No se trata solo de cómo se escribe actualmente su aplicación, se trata de escribir cada aplicación de una manera adaptable y que puede degradarse con gracia. Esto hace que la aplicación sea un poco más portátil y también admite más fácilmente cambios futuros. – defines

2

ActionLink El método no puede tomar HTML.

Usted necesita hacer una <a> etiqueta normal y utilizar @Url.Action(...) para la href.

<a href="@Url.Action("ActionName", "ControllerName")">Link Text</a>. 
Cuestiones relacionadas