2012-11-14 4 views
3

ASP.NET 페이지에 JavaScript 함수가 있습니다.이 JavaScript 함수는 표 머리글에서 '모두 선택'확인란을 선택하면 클라이언트 측의 표에있는 모든 상자를 검사합니다. 이것은 루프의 각 행에 대한 JS 함수에서 실제 컨트롤 ID를 구성하여 수행합니다 (즉, 현재 루프의 행 인덱스 인 + '_ ctl'+ i + ''+). 그런 다음 결과를 설정합니다 체크 할 컨트롤.자식 컨트롤 명명 표준이 변경 되었습니까?

이것은 오랜 시간 동안 정상적으로 작동했지만 지금은 작동을 멈췄습니다. 그 이유는 .NET 렌더링 엔진이나 내부 제어 ID를 만드는 것과는 다르게 말입니다. 예를 들어,이 서버가 작동중인 다른 서버에서 페이지의 원본을 볼 때 컨트롤 이름은 dgMain__ctl2_cbxChecked이지만이 서버가 작동하지 않는 서버의 컨트롤 이름은 dgMain__ctl02_cbxChecked입니다. 차이점은 ''이 작동하지 않는 버전의 'ctl'부분에 숫자 ID 앞에 붙어 있다는 것입니다.

이것이 .NET 버전과 관련이 있는지 궁금합니다. 상대적으로 새로운 (이전 컴퓨터에서 작동하는 데 사용되는) 로컬 컴퓨터에서는 작동하지 않지만 프로덕션 환경에 배포 된 이전 서버에서는 여전히 작동합니다. 두 버전 모두 ASP.NET 1.1을 실행 중입니다.

해결 방법에 대한 단서가 있습니까?

+1

간단한 해결책으로 ID를 사용하지 마십시오. 클래스 이름과'[data - *]'속성을 사용하여 데이터를 JavaScript에 전달하십시오. HTML 파일 내에 스크립트를 만들지 않고 스크립트를 자체 JS 파일에 보관할 수 있습니다. – zzzzBov

답변

1

이것은 매우 위험한 방법입니다. 대신 결과 컨트롤 ClientID의 서버 측을 수집 한 다음 ClientScriptManager을 사용하여 JavaScript로 전달해야합니다. 또 다른 방법은 CssClass을 사용하고 jQuery 또는 다른 DOM 조작 라이브러리를 사용하여 컨트롤을 찾는 것입니다.

컨트롤 명명 규칙은 ID가 보장되지 않도록합니다. .NET 버전에서 버전으로 변경 될 수는 있지만 (가능성은 낮음) 페이지의 다른 컨트롤이나 사용자 컨트롤의 중첩 수준 등에 따라 변경할 수 있습니다.

관련 문제