質問

私はもともと 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を呼び出します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top