2010-12-31 13 views
15

Ich bin verwirrt mit ASP.NET relativen Pfad, bitte kann jemand helfen?ASP.NET relativen Pfad

In einer Master-Seite ich einen Link Label gab Referenzierung:

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

Von der ASP.NET offiziellen Dokumentation lese ich:

Das folgende Beispiel zeigt den ~ Operator verwendet, um eine Wurzel- angeben relativer Pfad für ein Bild bei Verwendung des Image Server-Steuerelements In diesem Beispiel wird die Image-Datei aus dem Ordner Images gelesen, der sich direkt unter dem Stammverzeichnis der Webanwendung befindet, unabhängig davon, wo sich die Seite auf der Website befindet.

/Account/~/Account/Login.aspx 

Warum:

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

mit dem Login-Markup, wenn ich den Link von einer Seite in den Ordner/Konto klicken, ich bin zu umgeleitet? Warum? H

Antwort

27

Weil Sie es direkt in Markup verwenden, anstatt in einem Server-Steuerelement. Etwas so einfach wie dies sollte das Problem beheben:

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

Grundsätzlich ist die ~ Pfadreferenz auf dem Server übersetzt werden muss, da es ein Verweis auf den Server-Pfad des Basisverzeichnisses der Anwendung ist. Einfaches HTML-Markup wird nicht auf dem Server verarbeitet, es wird nur an den Client übergeben. Nur vom Server verarbeiteter Code übersetzt den Pfad ~ in das, zu dem er aufgelöst wird.

+7

Oder: ">Login sollten Sie das gleiche Ergebnis. –

+0

Yup, das werde ich auch tun. Genauso wie mit dem '' Steuerelement. Je nachdem, was der Entwickler verwenden möchte, gibt es verschiedene Ansätze. – David

+0

Danke David & Jamie. Frohes neues Jahr euch beiden. –

0

Sie können ~ verwenden, wenn Sie auf URLs in ASP.NET-Serversteuerelementen verweisen. Sie verwenden es in einem <a>-Tag, das ist einfach HTML, die nicht wissen, etwas über ~. verwenden ' "/Images/SampleImage.jpg"' statt

+1

Was ich an der Verwendung des root "/" auf einer Seite nicht mag, ist, dass es je nach Umgebung anders sein kann.Wenn sich Ihre App beispielsweise in einem virtuellen Verzeichnis in XP in Ihrer Entwicklungsumgebung und im Webstamm auf dem Produktionsserver in Server03 befindet, erhalten Sie andere Ergebnisse. –

+1

"/Images/SampleImage.jpg" ist jedoch kein relativer Pfad. Dieser Ansatz funktioniert nur, wenn der Basispfad der Anwendung dem Serverstamm entspricht. Obwohl das oft der Fall ist, ist es nicht garantiert, und in der Tat nicht, was gefragt wurde. – David

+0

Sie haben Recht. Das war meine einfache Antwort. Jemand anderes hat ResolveClientUrl gepostet, was besser funktioniert. –

1

Verwendung dieser Befehl

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