2009-03-09 6 views
2

Ich habe derzeit Probleme herauszufinden, wie mit einem Dateipfad zu handhaben (dynamisch) an Steuerelement NavigateUrl.Wie behandelt man Sonderzeichen in ASP.NET HyperLink.NavigateUrl?

Angenommen, ich versuche, auf eine Datei mit dem Namen jäynä.txt im Stammverzeichnis von C: zu verweisen.
Passing "file:///C:/jäynä.txt" Ergebnis zu einem Link zu file:///C:/jäynä.txt, wie auch HttpUtility.UrlPathEncode("file:///C:/jäynä.txt").

Ersetzen der ä ** s mit ** %E4, die die Zeichenfolge "file:///C:/j%E4yn%E4.txt" gibt, macht einen funktionierenden Link zu file:///C:/jäynä.txt geben, aber ich habe nicht in der Lage gewesen, einen Weg zu finden, den Austausch zu machen, ohne es selbst zu definieren. Mit Replace("ä", "%E4"), zum Beispiel.

Gibt es eine Möglichkeit, die Dateipfadzeichenfolge automatisch zu verarbeiten, sodass die HyperLink sie korrekt anzeigt, ohne manuell aufzulisten, welche Zeichen in der Zeichenfolge ersetzt werden sollen?

Zusätzlicher Hinweis:
Es kann ein Weg sein, um dies zu umgehen, indem die Zeichenkodierung spesifying, in dem die Seite gerendert wird, weil das Debuggen zeigt, dass die HyperLink zumindest die Zeichenfolge speichert "file:///C:/jäynä.txt" unverändert, aber irgendwie verstümmelt es um die Zeit des Renderings.
Dies ist jedoch nur dann der Fall sein scheint in Wiedergabe der NavigateUrl, weil anderen Komponenten sowie HyperLink ‚s Text -property ist durchaus in der Lage zu machen den Charakter ä unverändert.

Antwort

1

Dies ist aufgrund der wie der Browser beginnt, den Pfad zu interpretieren, in der Regel Personen werden vermeiden, Zeichen wie das in den URLs der Seiten zu verwenden.

In Ihrem Fall glaube ich, dass Sie im besten Fall getroffen haben, da mir keine Möglichkeit bekannt ist, das Verhalten von HttpUtility und/oder der NavigateUrl-Eigenschaft zu ändern. Zumindest nicht ohne ein benutzerdefiniertes Steuerelement dafür zu erstellen.

+0

Nein, ich glaube nicht, dass es der Browser ist. Ich habe gerade die Quelle der Seite im ersten Fall überprüft und der Link href ist href = "file: /// C: /j%c3%a4yn%c3%a4.txt", was darauf hindeutet, dass der Server es so gerendert hat den ersten Platz. Sie können auf die Lösung hart sein. – vipirtti

+0

Es kann indirekt der Browser sein, basierend auf etwas in BrowserCaps oder etwas ähnliches, um es auf das System zu übertragen. Unabhängig davon müssen die Werte, die Sie für NavigateUrl angeben, vorab bereinigt werden. Dies ist dokumentiert, da es mit UrlEncode nicht automatisch etwas bewirkt. –

1

Verwenden Sie keine HyperLink-Steuerung. Verwenden Sie stattdessen das HtmlAnchor-Steuerelement. Es wird dein Problem lösen. Ich weiß nicht, warum Microsoft so entworfen hat.

4

Die NavigateUrl-Eigenschaft eines Hyperlinks codiert Unicode-Zeichen in der URL.

Stattdessen können Sie das Attribut href Eigenschaft des Hyperlink wie folgt festgelegt:

hyperlink1.Attribute("href") = "file:///C:/jäynä.txt" 
+0

Die korrekte Syntax lautet: 'hyperlink1.Attributes [" href "] =" file: /// C: /jäynä.txt "' –

+1

Sie können geschweifte Klammern verwenden, wenn Sie vb.net verwenden –

0

Thank you! Der Post mit den 'Attributen' löste mein Problem. In meinem Fall war es

HyperLink6.Attributes["href"] = "http://høgstedt.danquah.dk/"; 

Das Problem der Verwendung von speziellen dänischen Zeichen in einer URL scheinen viele Programmierer zu haben beunruhigend - eine Suche bietet mehrere sehr komplizierte Ansätze. Dieser ist EINFACH und es funktioniert einfach. Also noch einmal, danke

+1

Stellen Sie keine Antwort nur auf Sag Danke. Nur ein Kommentar ist genug. Und ein Upvote wird noch mehr geschätzt – Steve