0

~/Folder1/UserControl1.ascx:

<%@ Control Language="C#" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink1</asp:HyperLink>

~/UserControl2.ascx:

<%@ Control Language="C#"CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %>
<asp:HyperLink runat="server" NavigateUrl="?foo=bar">HyperLink2</asp:HyperLink>

結果:

http://localhost/Folder1/?foo=bar

http://localhost/?foo=bar

なぜそれが起こるのですか?

4

2 に答える 2

2

パスの先頭に / または ~ がない場合は、CURRENT 位置に対して相対的であると見なされます。

ユーザー コントロールからは、現在の位置はコントロールの位置です。

于 2010-02-02T22:23:32.320 に答える
2

リンクはユーザー コントロールのディレクトリに対して相対的に解決され、実際にはResolveClientUrl();内部で呼び出されるため、これと同じ動作が見られます。

MSDN からの説明:

このメソッドによって返される URL は、コントロールがインスタンス化されるソース ファイルを含むフォルダーを基準としています。このプロパティを継承するコントロール (UserControl や MasterPage など) は、コントロールに関連する完全修飾 URL を返します。

Page.ResolveClientUrl()コード ビハインドでURL を解決すると、問題が解決します。

于 2010-02-02T22:25:11.633 に答える