2010-02-02 3 views
0

~/Folder1/UserControl1.ascx:왜 asp : 하위 폴더에있는 사용자 정의 컨트롤의 HyperLink.NagigateUrl에이 하위 폴더가 있습니까?

<%@ 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 

왜 발생합니까?

답변

2

당신은이/없거나 ~는 경로의 시작 부분에, 그것은 현재 위치를 기준으로 간주됩니다.

사용자 정의 컨트롤에서 현재 위치가 컨트롤의 위치입니다.

2

링크는 실제로 내부적으로 ResolveClientUrl();를 호출, 사용자 정의 컨트롤의 디렉토리에 해결 상대, 그래서 당신은이 같은 문제를 참조하십시오. MSDN에서

설명 :이 방법에 의해 리턴

URL은 제어 인스턴스화 된 소스 파일을 포함하는 폴더에 상대적이다. UserControl 및 MasterPage와 같이이 속성을 상속하는 컨트롤은 컨트롤에 상대적인 정규화 된 URL을 반환합니다.

코드 숨김에서 Page.ResolveClientUrl()으로 URL을 해결하면 문제가 해결됩니다.

+0

하위 폴더에있는 코드에서이 메서드를 호출 할 수 있습니까? 나는. this.Page.ResolveClientUrl() 곳 : UserControl을 – abatishchev

+0

@abatishchev - 예,이 –

+0

은 그럼 왜 나를 위해 작동하지 않는 이상 그냥 잘 작동합니다 .. urlSearch.NavigateUrl = this.Page.ResolveClientUrl ("검색 = 사실? ")는 url의 주소를 http : // localhost/Approve /? search = true와 동일하게 만듭니다. 어쩌면 내가 뭔가 잘못한거야? – abatishchev

관련 문제