トップ回答者
DataGridのHyperLinkのNavigateUrlを文字化けさせない方法

質問
-
開発環境 WindowXp Professional SP2
VisualStudo2005 Professional
ASP2.0
DataGridにItemTemplateにHyperlinkを作成し、NavigateUrlを動的に作成しています。
file:///X:共有フォルダ/書式/文書.doc
のような日本語交じりのURLを生成したいのですが、実行してみるとURLの日本語部分が文字化けしてしまいます。
<%@ Page ResponseEncoding="shift_jis" %>にしてみてもダメでした。
何かよい方法をご存知の方いらっしゃいましたらご教授ください。
回答
-
はじめまして。
TAKASEです。
私も丁度同じような問題となったので、調べました。
操作自体(ダウンロード)には、問題ないのですが、
ステータスバーに表示される内容が文字化けするのが気になる方がいるので。
asp:HyperLink は NavigateUrl に指定した値は自動的にエンコードされてしまうみたいです。
a href だとエンコードされないので、そちらを利用することにしました。
下記の方法ならば、DataViewできちんとバインドしてくれます。
<a href=<%# Eval("URL") %>><%# Eval("FileName") %></a>
なるべくなら、ファイル名は半角英数字がベストなのですが、やはりどうしても日本語を利用したいという
ユーザの方もいるので対応しました。
私の開発環境は、NET2005 ASP.NET C# です
すべての返信
-
説明が足りず申し訳ございません。
以下のソースで
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "文書名") %>'
NavigateUrl='<%#"file:///X:/@共有キャビネット/04.書式集/あ~こ/" +
DataBinder.Eval(Container.DataItem, "URL") %>' />
</ItemTemplate>
以下のようなリンクが生成されます。
<a id="ctl00_ContentPlaceHolder1_DG_Document_ctl02_HyperLink1" href="file:///X:/@%e5%85%b1%e6%9c%89%e3%82%ad%e3%83%a3%e3%83%93%e3%83%8d%e3%83%83%e3%83%88/04.%e6%9b%b8%e5%bc%8f%e9%9b%86/%e3%81%82%ef%bd%9e%e3%81%93/%e6%a5%ad%e5%85%b1/%e6%a5%ad%e5%85%b1002%e9%87%8d%e8%a6%81%e5%8d%b0%e5%88%b7%e7%89%a9%e6%ae%8b%e9%ab%98%e7%85%a7%e4%bc%9a%e8%a1%a8.doc">文書1</a>
リンクとしては機能しているのですが、当然「ページを表示できません。」になります。
ブラウザのアドレスバーには以下のように表示されています。
X:\@a?±a??a?-a?£a??a??a??a??\04.a?,a??e??\a??i??a??\a\-a?±\a\-a?±002e??e|?a?°a?・c?caR?e≪?c?§a??e!¨.doc -
中博俊様 アドバイスありがとうございます。
以下のように"/"スラッシュを2つに減らしてやってみました。
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "文書名") %>'
NavigateUrl='<%#"file://X:/@共有キャビネット/04.書式集/あ~こ/" + DataBinder.Eval(Container.DataItem, "URL") %>' />
</ItemTemplate>
生成されたHyperLinkも/が減りましたが、文字化けは解消せず、クリックしてもリンクとして機能しなくなりました。(ページが表示されませんの画面にも行かない)
<a id="ctl00_ContentPlaceHolder1_DG_Document_ctl187_HyperLink1" href="file://X:/@%e5%85%b1%e6%9c%89%e3%82%ad%e3%83%a3%e3%83%93%e3%83%8d%e3%83%83%e3%83%88/04.%e6%9b%b8%e5%bc%8f%e9%9b%86/%e3%81%82%ef%bd%9e%e3%81%93/%e6%99%ae%e9%80%9a/%e6%99%ae%e9%80%9a522%e6%99%ae%e9%80%9a%e9%a0%90%e9%87%91%e5%85%a5%e9%87%91%e5%8f%96%e6%ac%a1%e5%b8%b3%e5%8f%97%e5%8f%96%e8%a8%bc.doc">文書1</a>
リンク中の"@"や"/"が悪さをしてるのはないかと思い、
NavigateUrl='<%#"file://X:/書式/test..doc"%>' />
で試したところ、リンクとしては機能するようになりましたが、やはり以下のように文字化けし、
<a id="ctl00_ContentPlaceHolder1_DG_Document_ctl02_HyperLink1" href="file://X:/%e6%9b%b8%e5%bc%8f/test.doc">文書1</a>
実際にクリックした場合ブラウザのアドレス欄は
X:\%e6%9b%b8%e5%bc%8f\test.doc
となりました。
やはりDataGrid中のhyperlinkで日本語を使用するのは不可能なのでしょうか。 -
はじめまして。
TAKASEです。
私も丁度同じような問題となったので、調べました。
操作自体(ダウンロード)には、問題ないのですが、
ステータスバーに表示される内容が文字化けするのが気になる方がいるので。
asp:HyperLink は NavigateUrl に指定した値は自動的にエンコードされてしまうみたいです。
a href だとエンコードされないので、そちらを利用することにしました。
下記の方法ならば、DataViewできちんとバインドしてくれます。
<a href=<%# Eval("URL") %>><%# Eval("FileName") %></a>
なるべくなら、ファイル名は半角英数字がベストなのですが、やはりどうしても日本語を利用したいという
ユーザの方もいるので対応しました。
私の開発環境は、NET2005 ASP.NET C# です
-
るーしぇ さん、
こんにちは!
フォーラム オペレーターの服部 清次です。
るーしぇ さんがこちらの質問を投稿されてからしばらく経ちましたが、その後の状況はいかがでしょうか?
文字化けの問題は、無事解決しましたでしょうか?
るーしぇ さんの現在の状況が気になるところなのですが、今回、中博俊 さんと takase さんの回答が役に立ったのではないかと思いましたので、こちらの情報を他の方々に共有していただくためにも、ひとまず、私の方で回答チェックを付けさせていただきました。
もし、るーしぇ さんの問題がまだ解決していない場合は、遠慮なく回答チェックを外して質問を続けてください。
その際には、現在の状況も併せて教えていただければ嬉しいです。
これからも MSDN Forum をよろしくお願いします。
それでは、また!
_____________________________________________
マイクロソフト株式会社 フォーラム オペレータ 服部 清次