2009-03-23 2 views
7

모두 (코드 게시물 등)이 일을하고있는 것 같아요 ...하지만 난 모르겠다 :(javascript를 사용하여 runat = "server"ASP 요소에 액세스하려면 어떻게해야합니까?

언제든지 자바 스크립트를 사용하여 ASP 요소를 조작하려고하면 "요소가 null"또는 " 문서가 정의되지 "등, 잘 일반적으로 작동하는 자바 스크립트 오류 .....

...하지만 나는 RUNAT = 추가 할 때"서버 "속성이있는 요소를하지 내 자바 스크립트에 보이지 않는 것 같다.

하나를 제안은 감사 할 것입니다

감사합니다, 앤드류

답변

23

아마도 요소/컨트롤이 명명 컨테이너 (마스터 페이지, ITemplate, 마법사 등) 역할을하는 하나 이상의 ASP.NET 컨트롤 내에 있으며 ID가 변경되는 것 같습니다.

브라우저에서 "소스보기"를 사용하여 렌더링 된 HTML에서 무슨 일이 일어나는지 확인할 수 있습니다.

JavaScript가 ASPX 페이지에있는 경우 일시적으로 문제를 해결하는 가장 쉬운 방법은 use the element's ClientID property입니다. 당신은 당신이 JS를 통해 참조하고 싶었다 제어라는 이름으로 TextBox1이 있다면 예를 들어, :

var textbox = document.getElementById('<%= TextBox1.ClientID %>'); 
+1

좋은 답변을 ...하지만 첫 번째 비록 설명은 ... 덕분에 대답하는 사람에게주고했다! – Andrew

+3

@Andrew - 이것이 더 좋은 대답이라면, 당신은 그것을 받아 들여야 만합니다. SO 품질은 속도보다 빠릅니다. –

+0

그게 내가 실제로 생각한거야 ... 할거야. – Andrew

2

당신이 텍스트 상자가있는 경우 :

<asp:TextBox id="txtText" runat="server" /> 

당신이 사용할 수 있습니다

var textBox=document.getElementById('<%=txtText.ClientID %>'); 

모든 WebControl는 동일한 ClientID 속성을 노출합니다.

2

요소 runat="server" 만들기를 ASP.NET 그것은 내부의 컨테이너 이름을 지정 내용에 따라 해당 요소의 클라이언트 측 ID를 변경합니다. 따라서 document.getElementById을 사용하여 요소를 조작하는 경우 .NET에서 생성 한 새 ID를 전달해야합니다. 당신이 그렇게처럼 자바 스크립트에서 인라인을 사용할 수 있습니다 ... 그 생성 된 ID를 얻기 위해 ClientId 특성에 봐 : 질문에 대한 답변이되었습니다

var element = document.getElementById('<%=myControl.ClientID%>'); 
1

모든하지만, 나는 좀 더 정보를 게시 줄 알았는데 ...

릭 스트 렐 (Rick Strahl)은이 문제를 해결하는 데 많은 어려움을 겪었습니다. ASP .NET 4.0이 도착했을 때

http://www.west-wind.com/WebLog/posts/252178.aspx

는 다행히, 당신이 exacly 클라이언트 ID 년대가 될 것 지정할 수 있습니다!

http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx

+0

+1 : Rick의 멋진 솔루션과 .NET 4의 새로운 기능. 외부 파일에 JS가있는 문제를 해결합니다 (여기서 <% = txtText.ClientID %>와 같은 것을 사용할 수 없습니다). –

관련 문제