2011-01-06 4 views
16

이것은 정확히 Fermat의 마지막 정리는 아니지만 대학에서 제공하는 무료 전화 요금 청구서처럼 나를 귀찮게합니다. 때로는 포스트 백을 발생시키지 않는 HyperLink을 생성하기를 원하므로 대상 URL을 #으로 지정합니다. 마크 업이 하위 폴더의 UserControl에서 발생하면NavigateUrl = "#"는 href = "SubFolder/#"가됩니까?

/ 
|- Home.aspx (uses UC.ascx) 
|- Sub 
    |- UC.ascx 

과 같이 URL이 상대 경로로 다시 작성됩니다.

<asp:HyperLink runat="server" NavigateUrl="#" >Click Me!</asp:HyperLink> 

은, 불행하게도, 잘못

<a href="SubFolder/#">Click Me!</a> 

된다. 분명히 나는 ​​서버 컨트롤을 사용하지 않음으로써이 문제를 해결할 수 있지만 바보 같다. 피할 수 있습니까?

요점은 jQuery 또는 코드 숨김으로 클릭 이벤트를 추가하고 다시 게시를 원하지 않는다는 것입니다. 그러나 CSS 이유로 하이퍼 링크가되기를 원합니다.

+0

이벤트 객체를 사용하여 탐색을 취소 할 수 있습니다. 함수 (e) {e.preventDefault(); }. jQuery를 사용하여 일부 이벤트를 바인딩하려는 경우 서버 컨트롤을 사용할 필요가 없습니다. – BrunoLM

+0

이 특별한 경우 서버의 로직이 링크의 가시성과 자바 스크립트 이벤트의 특정 코드를 제어합니다. 이 물론 주위에 방법이 있습니다 (예 : 난 그냥 자리 표시 자에 포장, 그리고 마크 업에서 클릭 이벤트를 정의하는 <% %> 마크 업을 사용)하지만 바보 같은 일들 중 하나를 할 필요가있을 것입니다 탐색을 방지하기 위해 자바 스크립트를 사용하여 , 그리고/또는 서버 컨트롤을 사용하지 않음) 제대로 작동하는 서버 컨트롤로 훨씬 더 우아하게 처리 할 수있는 기본적인 작업을 수행하십시오. –

답변

11

쉬운 방법 :

<asp:HyperLink ID="HyperLink1" 
       navigateUrl="#" 
       onclick="javascript:return false;"     
       runat="server">HyperLink</asp:HyperLink> 

또는

<asp:HyperLink ID="HyperLink1" 
       href="#" 
       runat="server">HyperLink</asp:HyperLink> 

또는 JQuery와 (nopostback) 당신이 다시 게시하고 싶지 않아요 링크에 클래스를 추가 :

$("a.nopostback").bind('click', function() { 
    return false; 
}) 
+1

두 번째 옵션이 작동합니다. 첫 번째는 작동하지 않습니다. 그의 상태에 정말로 어울리지 않는 마지막 상태. – BrunoLM

+4

# 2는 답입니다 ... 회상에서 너무나 명백한 것처럼 보입니다! 감사!레코드 용으로,'NavigateUrl = "./#"'여전히 렌더링은'href = "SubFolder/#"' –

+0

으로 편집되었습니다. 첫 번째 대답은 의미가 없으며, 실험의 작은 잔재였습니다. 불편을 끼쳐 드려 죄송합니다. –

6

서버 측 요소에 대한 속성을 설정할 수 있습니다.없이 HREF를 페이지 에 컨트롤을 추가, Attributes 재산 실제로

HyperLink1.Attributes 
2

를 사용하여 코드 숨김뿐만 아니라에서

<asp:HyperLink ID="HyperLink1" runat="server" Text="Click me" 
    href="#" style="color: red;" /> 

는/NavigateUrl 속성 (들)을 가장 큰 flexiblity을 제공합니다.
<asp:HyperLink ID="HyperLink1" runat="server"/> 

은 그런 뒤에 브루노의 대답과 같은 코드에서 href 속성을 할당 :

HyperLink1.Attributes.Add("href","{your-value-here}"); 

비록, 브루노와 캐스퍼의 답변은 특정 상황에서 브레이크 작동합니다. 예를 들어, HyperLink 컨트롤이 Repeater에 중첩되어 있다고 가정 해보십시오. 그런 다음 조건에 따라 href 속성을 실제 URL 또는 '#'으로 설정하려면 이러한 접근 방식이 작동하지 않습니다. '#'은 매번 렌더링됩니다.