2009-09-10 3 views
1

가끔 ASP.Net으로 작업 할 때 절망적으로 보일 수도 있습니다.ClientID에 액세스하면 포스트 백이 깨집니다.

웹 양식에는 ASP 테이블이 있습니다. ASP 테이블에는 몇 가지 변경을 수행하는 사용자 정의 컨트롤이 있습니다. ASP 테이블에는 텍스트 상자가 있습니다 .... 지금까지 일반의 아무것도!

Page_Load의 일부인 코드에서 일부 자바 스크립트를 등록하기 위해 텍스트 상자의 ClientID에 액세스해야합니다 ... 그래서 자바 스크립트는 필요한 모든 작업을 수행하는 것처럼 보입니다. 모두 행복합니다.

아니, 분명히 모두가 행복하지는 않지만 ASP.Net 자체는 매우 불만입니다! 클라이언트 ID를 액세스하는

는 소스에 나타나는 ID는 다음

myControl_myTextBox 

는 클라이언트 ID를 액세스 라인을 주석 것은 이드로 렌더링 의미

ctl00_BodyPlaceHolder_myControl_myTextBox 

라인 그 클라이언트 ID에 액세스하는 경우 다음과 같습니다.

jsBuilder.AppendFormat(@"var filter = new TBFilter($(""#{0}"")[0]);", myTextBox.ClientID); 

나,하지만 그것은 포스트 백을 깨뜨리는 사실이다. 해당 텍스트 상자에 내용을 입력하고 제출 버튼을 누르면 (페이지에 제출 버튼이 있습니다!) 페이지를 다시로드하지만 텍스트 상자에 기본값을 되돌려 원래 있던 내용을 완전히 무시합니다. 광기 - 나는 이상하고 이상한 일을 아무것도하지 않았으므로 왜 다시 게시판을 망가 뜨 렸는가?

+0

제대로 이해하고 있다면 텍스트 상자의 ClientID 속성은 원래 ctl00_BodyPlaceHolder_myControl_myTextBox이지만 다시 게시 한 후에는 ClientID가 이제 텍스트 상자의 myControl_myTextBox가됩니까? –

+0

죄송 합니다만, ClientID 속성에 액세스하면 myControl_myTextBox에서 ID가 나옵니다. 그러나 해당 행을 주석 처리하면 id가 나옵니다.이 문제를 반영하도록 – Paul

+0

jsBuilder.AppendFormat (@ "var filter = new TBFilter ($ (""# {0} "") [0]); ", myTextBox.ClientID); – Paul

답변

3

페이지로드시 등록하는 자바 스크립트는 포스트 백에서 발생하지 않아야하는 작업을 수행합니까? 그렇다면, Page.IsPostback을 점검하여 사용시기를 제어해야합니다.

또한 페이지 수명주기에서 Page_Load이 제어 포스트 백 이벤트 (예 : Click 이벤트 버튼)보다 먼저 발생한다는 점도 알아 두어야합니다. 따라서 등록하는 자바 스크립트 코드가 Click 이벤트의 결과에 따라 다르면 Click 이벤트 (해당 버튼을 클릭 할 때만 발생해야하는 경우) 또는 Page_PreRender 이벤트 (항상 발생해야하는 경우)에 등록해야합니다.

편집 :
또한 약간의 변화가 클라이언트 ID가의 만드는 방법에를 Page_Load 이후에 만들어진 될 수있다. Page_PreRender 이벤트에서 모든 작업이 완료되었는지 확인하는 것이 가장 좋습니다.

+0

Page_PreRender로 이동했는데 문제가 해결 된 것 같습니다. 아직도 그것이 처음에 문제가되어야한다고 생각하지 마라! – Paul

관련 문제