2010-01-22 3 views
0

.ascx 사용자 정의 컨트롤에서 < % = obj.ClientID %> 확장에 문제가 있습니다. 전달) 일부 HTML 요소,이벤트 문자열에서 ClientID 확장하기

function doSomething(objectId) 
{ 
    ... 
} 

내가하는 .ascx 파일을 가지고, 한 요소의 온 클릭에 = 나는 해봐요을 (전화를 걸 :

나는 자바 스크립트 함수를 포함,은 .js 파일이 해당 .ascx 파일의 요소 ID (전달 된 ID는 클릭 한 요소가 아닌 요소이므로 "this."를 사용할 수 없습니다).

예를 들어 더 명확하게 알 수 있습니다.

<script type="text/javascript"> 
    function redirect() 
    { 
     doSomething('<%= top.ClientID %>'); 
    } 
</script> 
<div id="top" runat="server"> 
    <img src="..." alt="..." onclick="redirect();"/> 
</div> 

을하지만이되지 않습니다 :

이 작동 나는 소스를 볼 때

<div id="top" runat="server"> 
    <img src="..." alt="..." onclick="doSomething('<%= top.ClientID %>');"/> 
</div> 

, 내가 볼 수있는 <퍼센트 %가 교체가 일어나지도 않은> = 대신의 " doSomething ('ctl00_myControl_top'); " 나는 "doSomething ('< % = top.ClientID %>');"

스크립트 확장은 전자의 경우에는 발생하지만 후자의 경우에는 발생하지 않습니다. 물론 하나의 페이지에 여러 개의 컨트롤 복사본을 포함하면 문제가 해결되므로 해결 방법은 허용되지 않습니다. 한 인스턴스의 "redirect()"함수에 액세스 할 수 있습니다.

이 대체 작업을 수행하는 방법에 대한 아이디어가 있으십니까?

+0

div가 runat = 'server'인 양식 태그 안에 있습니까? –

+0

전체 서버 컨트롤은 form 태그 안에 runat = "server", div 및 script 섹션을 모두 포함합니다. –

답변

2

내 컴퓨터에서 작동합니까?

<div id="top" runat="server"> 
    <a href="#" onclick="doSomething('<%= top.ClientID %>')">rarrarara</a> 
</div> 

<div id="ctl00_ContentPlaceHolder1_top"> 
    <a href="#" onclick="doSomething('ctl00_ContentPlaceHolder1_top')">rarrarara</a> 
</div> 
+0

동일합니다. 내 컴퓨터에서도 작동합니다. – Jakkwylde

+0

내 컴퓨터에서 예상했기 때문에, 그렇게하지 않으면 놀랐습니다. 나는 엄청나게 분명한 모든 실수를 체크 아웃했다. –

+0

앵커에 ID와 runat = "server"를 추가하는 중입니다. onclick 이벤트가있는 요소에 runat = "server"태그가있는 경우 <% %> 확장이 발생하지 않는 것으로 보입니다. –

0

는 대체 경로를 고려되다 :

당신은 인라인 표현 <%= (controlName).ClientID %>를 사용하여 자바 스크립트에서 참조하는 컨트롤이 자사의 'ClientIDMode'지정 정적으로 설정되었는지 확인 값을 입력 한 다음 해당 컨트롤의 ID 필드에있는 텍스트를 사용하여 참조하십시오. 나는 이것을 최근의 프로젝트에서 사용하는 것으로 끝났다. 더 자세한 설명은 아래 링크를 참조하십시오

Code Project - ASP.NET v4.0 Client ID Feature

을 나는 경우 (글로벌 리소스 파일에서 텍스트를 배치에 관한 유용한 아이디어를 "정적"을 발견 할 수있는 'ClientIDMode'지정 설정과 함께 언어 전환)을 서버 수준에서 실행하지 않아도되는 표준 HTML 컨트롤의 필드에 추가합니다. 나는 특정 div 또는 ASP 패널을 표시하거나 숨길 JavaScript 함수를 호출해야하는 표준 HTML 버튼에서이 메서드를 사용했습니다. 그래서 같은 인라인 표현 태그에 GlobalResource 기능을 사용

<input id="btnToggleFilterOptions" type="button" value="<%=GetGlobalResourceObject("SiteResource", "btnToggleFilterOption")%>" onclick="javascript:ToggleCssClass('divFilterOption','visible'); return false;" class="button submit" /> 

<asp:Panel ID="divFilterOption" ClientIDMode="Static" runat="server"> 
    <asp:TextBox ID="txtFilterOption1" runat="server" /> 
</asp:Panel> 

나는 이것이 이전 게시물입니다 알지만, ASP를 .NET 및 클라이언트 ID 구글에서 검색 할 때 인기 히트입니다. 나는 이것이 다른 누군가를 돕기를 바랍니다.