ASP.NET 2.0のHyperLinkColumnでチルダが解決されない
質問
私はもともと Windows 2000 サーバー上の .Net 1.1 Framework に展開された ASP.NET アプリケーションを持っていますが、現在は 2.0.50727 を使用して Windows 2008 Server 上で使用しています。アプリケーションの多くの領域でチルダ (~) を使用して絶対パスを解決します。これは、asp:hyperlink コントロール (run-at サーバー タグ付き) などでは機能しますが、HyperLinkColumns を使用してバインドされたデータグリッド コントロールでは機能します。データベースから返された ID 値に基づいてリンクすると、チルダがページに書き込まれます。
このコード:
HyperLinkColumn oLink = new HyperLinkColumn();
oLink.DataNavigateUrlField = "IdField";
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";
これをページにダンプしています:
<a href="~/Here171201.aspx">
IIS または .NET Framework のバージョン間で何が変更されたため、この機能が動作しなくなる可能性がありますか?チルダは 1.1 で間違いなく解決されていました。私たちの組織内の 12 台の 1.1 Framework サーバーにまったく同じコードがデプロイされています。残念ながら、DataNavigateUrlFormatString を設定するクラスは Page にアクセスできないため、回避策として Page.ResolveUrl を挿入するためにいくつかの工夫をする必要があります。
解決
何も変わったことは分かりませんが、HyperLinkColumns は使用していないので (Template 列が提供するコントロールの方が好きです)、変更点は調べていません。
ことわざにあるバンドエイドとして、次の行を変更することが考えられます。
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";
これに:
oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx");
記憶があれば、マスター ページに移動してユーザー コントロールから「~」を使用するときにいくつかの問題が発生しましたが、そのようなものを読んでからしばらく経ちました。
他のヒント
私は、DataGridのHyperlinkColumnが自動的に絶対パスにURLを解決するとは思いません。 IIRC、DataNavigateUrlFormatString
プロパティは、内部でのみ供給形式にString.Format()
を呼び出します。あなたは、これは、.NET 1.1で正常に働いていましたか? IIRC、.NET 1.1はチルダベースの自動URLの解像度を持っていませんでした。
私の意見では、あなたはスティーブンによって提示されたソリューションを使用する必要があります(手動Page.ResolveUrl
を呼び出します。)