2009-04-01 4 views
1

Server.Execute에 대한 일부 문제가있어 세부 사항을 찾을 수 없습니다.ASP.NET Server.Execute

Page page = new WidgetProcessor(Widget); 
Server.Execute(page, htmlTextWriter, true); 

위 코드의 위젯은 사용자 정의 컨트롤을 인스턴스화하는 방법을 알고있는 간단한 객체입니다. WidgetProcessor는 위젯을 가져와 위젯 컨트롤을 페이지에 추가합니다. 이것은 초기로드에서 잘 작동하지만 포스트 백을 처리하지는 않습니다. 실제로 사용자 컨트롤 이벤트를 발생시키는 것은 결코 아니며, 게시하지 않은 것처럼 일관되게 원래 페이지를 반환합니다.

this article from 2003을 찾았습니다. 지금까지 수정했을 것입니다.

도움을 주시면 감사하겠습니다.

답변

0

컨트롤을 페이지에 동적으로 추가하기 때문에 적절한 시점에 뷰 상태에 등록되어 있지 않으므로 길을 잃고있는 것 같습니다. 동적 컨트롤을 사용하는 경우 동일한 ID를 가진 컨트롤을 다시 추가해야합니다. 따라서 컨트롤이 선택되어 다시 게시를 등록 할 수 있습니다.

+0

이것은 문제가되지 않습니다. 페이지 이벤트는 Server.Execute를 사용하지 않고 직접 액세스하는 한 완벽하게 작동합니다. –

0

Page_Load를 실행하기 전에 컨트롤을로드해야합니다. OnInit은 일반적으로 완료됩니다. 즉, ASP.NET에서 ViewState 트랙 변경 내용을 설정하기 전에 컨트롤이 등록됩니다. 변경 내용 추적이 켜져 (Page_Load가 시작되기 직전에) 해당 컨트롤의 ViewState에 대한 모든 변경 사항이 더티로 처리되므로 초기 값과 변경된 값간에 차이가 없습니다. 또한 ViewState 엔진은 변경 내용 추적이 원래 값과 비교되지 않기 때문에 컨트롤이로드 된 후 포스트 백에서 값이 변경되었는지 여부를 알 수 없습니다.

+0

이것은 문제가되지 않습니다. 페이지 이벤트는 Server.Execute를 사용하지 않고 직접 액세스하는 한 완벽하게 작동합니다. –

0

Server.Execute를 사용하면 URL이 매개 변수로 전달되고 컨트롤이이 새 페이지로 이동합니다. 코드 실행은 새 페이지에서 발생합니다. 코드 실행이 끝나면 컨트롤은 호출 된 직후의 초기 페이지로 돌아갑니다. 그러나 Server.Transfer의 경우 매우 비슷하게 작동합니다. 즉, 실행이 새 페이지에서 중지되므로 호출 페이지로 컨트롤이 반환되지 않습니다. 두 경우 모두 브라우저에서 URL을 요청하지 않으므로 브라우저의 URL이 첫 번째 페이지 URL로 유지됩니다 (새 페이지 URL로 새로 고침되지 않음).