2011-03-22 4 views
2

(나는이 정상 ASP.NET 웹 파트에 모두 적용 믿고 및 SharePoint 웹 파트 호스팅) 웹 파트 내부에서 페이지 실행을 중지어떻게

웹 부분은 렌더링에 '수출'버튼이 있습니다를 csv로 출력하고 Excel에서 열 수 있도록 적절한 헤더를 설정합니다.

후킹이 버튼에 응답을 삭제 적절한 헤더와 콘텐츠 형식을 추가 이벤트를 클릭하는 것은 간단하다 -이 코드는 웹 파트 및 디버거에 추가 한 경우 다음의 경우 첨부 된 것으로 나타났습니다 그러나 example

페이지에이 (또는 다른) 웹 파트의 인스턴스가 여러 개있는 경우 HTTPApplication.CompleteRequest 또는 Response.End가 처리/페이지 수명주기를 중지하지 않고 모든 페이지 컨트롤에 대한 모든 이벤트가 계속 실행됩니다.

이 예제에서는 다른 웹 파트를 실행할 필요가 없으므로 낭비입니다. 아무 것도 응답에 도달하지 않습니다.

렌더링되는 다른 웹 파트를 중지시키는 방법은 무엇입니까?

답변

1

실제 내보내기 기능을 수행하는 다른 페이지를 만든 다음 내보내기 링크를이 다른 페이지로 연결하기 만하면됩니까?

응답에서 출력되는 내용을 정확하게 제어 할 수 있으므로 수동으로 요청을 종료해야하는 문제를 해결해야합니다.

+0

거의 모든 경우에 사용할 수있는 방법입니다. 그러나이 경우에는 렌더링 단계 전에 일부 데이터를 제공하는 웹 파트 연결이 있고 그 컨텍스트가 느슨합니다. . 내 해결 방법은 OnPreRender에서 모든 Page.Controls []가 false로 표시되도록 설정하는 것입니다. 적어도 RenderWebPart 등 실행을 중지해야합니다. – Ryan

+0

새 창에서 링크를 열면 페이지에서 벗어날 수 있습니다. 필요한 모든 데이터는 쿼리 문자열을 통해 전달되거나 세션 변수에 저장 될 수 있습니다. –

0

짧은 대답 : 아니오.

전체 포스트 백을 수행 중이므로 HTTP 응답 스트림에는 서버에서 제공 한 전체 HTML 페이지가 포함되어야합니다.

일부 매개 변수로 ASP.NET 출력 캐싱 및 새로 고침 캐시를 사용하면 페이지에서 데이터가 변경된 웹 파트를 렌더링 할 수 있습니다.

는 ASP.NET 캐싱이 문서를 읽기에 대해 자세히 알아보기 :

+0

포스트 백이 CSV 파일을 반환하므로 페이지를 새로 고치지 않으므로 페이지를 다시 만들 필요가 없습니다. – Ryan

0
HttpContext.Current.Response.End(); 

은 ASP와의 호환성을 위해입니다.

ApplicationInstance.CompleteRequest(); 

은 사용자가 원하는대로되어 있습니다.

+0

-하지만하지 않습니다 – Ryan