2009-03-09 30 views
2

私は現在、ファイルパスを(動的に)HyperLinkコントロールのNavigateUrlプロパティに渡すためにファイルパスを処理する方法を考え出しています。ASP.NETのHyperLink.NavigateUrlで特殊文字を処理するには?

のルートにあるjäynä.txtというファイルを参照しようとしています。
"file:///C:/jäynä.txt"の結果をfile:///C:/jäynä.txtへのリンクに、HttpUtility.UrlPathEncode("file:///C:/jäynä.txt")のようにします。 ä ** S ** %E4と、文字列"file:///C:/j%E4yn%E4.txt"を与えるの交換

は、file:///C:/jäynä.txtに取り組んリンクを与えませんが、私はそれを自分自身を定義せずに交換を行うための方法を見つけることができませんでした。例えば、Replace("ä", "%E4")である。

ファイルパス文字列を自動的に処理して、HyperLinkが正しく表示されるようにする方法はありますか?

追加注:
デバッグがHyperLinkは、少なくとも文字列"file:///C:/jäynä.txt"そのままを保存し、何とかそれを狂わせることを示しているため、ページがレンダリングされている文字エンコーディングをspesifyingことにより、この問題を回避するための方法があるかもしれませんレンダリングの時間の周り。
しかし、これが唯一のNavigateUrlため、他のコンポーネントのレンダリングにおける場合と同様になるようだHyperLinkさんText -property ä変わらない文字をレンダリングするすべての非常に能力があります。

答えて

1

これは、ブラウザがパスの解釈を開始する方法に起因します。通常、個人はページのURLにあるような文字を使用しないようにします。

あなたのケースでは、HttpUtilityおよび/またはNavigateUrlプロパティの動作を変更する方法がわからないため、最高のケースシナリオを打ち破ったと思います。少なくともカスタムコントロールを作成していなくても。

+0

いいえ、私はそれがブラウザであると信じていません。私はちょうど最初のケースでは、ページのソースをチェックし、リンクhrefはhref = "file:/// C:/j%c3%a4yn%c3%a4.txt"であり、サーバーがどのようにレンダリングしたかを示しています最初の場所。あなたは解決策が厳しいかもしれません。 – vipirtti

+0

BrowserCapsなどの何かに基づいて間接的にブラウザになる場合もあります。それにかかわらず、NavigateUrlに指定する値は事前にクリーニングする必要があります。これは、UrlEncodeで自動的に何もしないため、文書化されています。 –

1

HyperLinkコントロールを使用しないでください。代わりに、HtmlAnchorコントロールを使用します。あなたの問題を解決します。マイクロソフトがこのように設計した理由はわかりません。

4

ハイパーリンクのNavigateUrlプロパティは、URL内のユニコード文字をエンコードします。

代わりに、あなたはこのようにハイパーリンクのhref属性プロパティを設定することができます

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

正しい構文は次のとおりです: 'hyperlink1.Attributes [" href "] ="ファイル:/// C:/jäynä.txt " –

+1

vb.netを使用している場合は中括弧を使用できます –

0

ありがとうございました! '属性'を使った投稿が私の問題を解決しました。私のケースでは、URLに特殊なデンマークの文字を使用することの問題

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

たプログラマーの多くを悩まれているように見える - 検索では、いくつかの非常に複雑なアプローチを提供します。これは簡単で簡単です。 もう一度、ありがとうございます

+1

ありがとうございます。ただのコメントで十分です。そしてupvoteはさらに高く評価されています – Steve