0

私はもともと、Windows 2000 サーバー上の .Net 1.1 Framework に展開された ASP.NET アプリケーションを持っており、現在は 2.0.50727 を使用して Windows 2008 サーバー上で使用しています。チルダ (~) を使用して、アプリケーションの多くの領域で絶対パスを解決します。これは、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 のバージョン間で何が変更され、この機能が動作しなくなった可能性がありますか? Tilde は 1.1 で確実に解決されました。組織内の多数の 1.1 フレームワーク サーバーにまったく同じコードを展開しています。残念ながら、DataNavigateUrlFormatString を設定するクラスは Page にアクセスできないため、Page.ResolveUrl の回避策を挿入するためにいくつかの手間をかける必要があります...

4

2 に答える 2

3

何も変更されていませんが、HyperLinkColumns を使用していないため (テンプレート列が提供するコントロールを好みます)、変更を探していません。

ことわざのバンドエイドとしての 1 つの可能性は、この行を変更することです。

oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

これに:

oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx"); 

メモリが機能する場合、Master Pages に移動して User Controls から「~」を使用するときにいくつかの問題がありましたが、そのようなものを読むのは久しぶりです。

于 2009-03-26T14:05:04.000 に答える
1

DatagridのHyperlinkColumnがURLを絶対パスに自動的に解決するとは思いません。IIRC、DataNavigateUrlFormatStringプロパティは、指定された形式でのみ内部的に呼び出しString.Format()ます。これが.NET1.1で正しく機能したことを確認しますか?IIRC、.NET 1.1には、チルダベースの自動URL解決機能がありませんでした。

私の意見では、Stephenによって提示されたソリューションを使用する必要があります(Page.ResolveUrl手動で呼び出します)。

于 2009-03-26T14:24:32.003 に答える