2010-12-31 20 views
15

Estoy confundido con la ruta relativa de ASP.NET, ¿alguien puede ayudarme?Ruta relativa de ASP.NET

En una página maestra me dio una etiqueta de enlace de referencia:

<a href="~/Account/Login.aspx">Login</a> 

De la documentación oficial ASP.NET leí:

El siguiente ejemplo muestra que el operador ~ utilizado para especificar un root- relativa ruta para una imagen al usar el control del servidor de imagen En este ejemplo, el archivo de imagen se lee de la carpeta Imágenes que se encuentra directamente debajo de la raíz de la aplicación web, , independientemente de dónde se encuentre la página.

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />

Con el marcado de sesión, al hacer clic en el enlace de una página en la carpeta/cuenta, estoy redirigido a:

/Account/~/Account/Login.aspx 

¿Por qué? ¿POR QUÉ? H

Respuesta

27

Porque lo está utilizando directamente en el marcado, en lugar de en un control de servidor. Algo tan simple como esto debe solucionarlo:

<a runat="server" href="~/Account/Login.aspx">Login</a> 

Básicamente, necesita la ~ referencia de la trayectoria de traducirse en el servidor, ya que es una referencia a la ruta del servidor de directorio base de la aplicación. El lenguaje HTML simple no se procesa en el servidor, solo se entrega tal como está al cliente. Solo el código procesado por el servidor traducirá la ruta ~ a lo que resuelve.

+7

O: ">Login te dará el mismo resultado. –

+0

Sí, eso también lo hará. Al igual que con el control ''. Hay varios enfoques diferentes, según lo que el desarrollador quiera usar. – David

+0

Gracias David y Jamie. Feliz año nuevo para ustedes dos. –

0

Puede usar ~ cuando consulte las URL dentro de los controles del servidor ASP.NET. Lo está usando en una etiqueta <a> que es simplemente html que no sabe nada acerca de ~. utilizar ' "/Images/SampleImage.jpg"' en lugar

+1

Lo que no me gusta de usar la raíz "/" en una página es que puede ser diferente dependiendo de su entorno.Por ejemplo, si su aplicación está en un directorio virtual en XP en su entorno de desarrollo y en la raíz web en el servidor de producción en Server03, obtendrá resultados diferentes. –

+1

"/Images/SampleImage.jpg" no es una ruta relativa, sin embargo. Este enfoque solo funcionará si la ruta base de la aplicación se corresponde con la raíz del servidor. Si bien ese es a menudo el caso, no está garantizado, y de hecho no es lo que se preguntó. – David

+0

Tienes razón. Esa fue mi respuesta fácil sin embargo. Alguien más ha publicado ResolveClientUrl, que funcionará mejor. –

1

uso de este comando

<a href="<%=Page.ResolveUrl("~/product.aspx")%>" >Link To Products</a>