2008-10-07 5 views
1

여기 내 상황이 있습니다.양식 게시 완료 후 브라우저 창 닫기

ASP.NET 웹폼에 버튼이 있습니다. 이 버튼은 많은 숨겨진 필드 (동적으로 생성 된)가있는 페이지를 가리키는 새 브라우저 창을 만듭니다. 이 양식은 본문 onload 이벤트에 대해 SQL Reporting Services에 제출합니다. 이 잘 작동하고 보고서가이 새 창에 표시됩니다.

그러나 지금도 SQL Reporting Services에 양식을 게시하고 싶지만 Excel 스프레드 시트를 다시 가져오고 싶습니다. 그래서 rs라는 이름으로 다른 숨겨진 입력을 추가합니다 : Excel의 형식과 값. 이 작동하고 사용자가 Excel 파일을 다운로드 할 수있는 옵션을 가져옵니다.

그러나 이제는 추가 창을 만들었습니다. 이 문제를 어떻게 해결할 수 있습니까? 같은 창에서 동적 양식과 POST를 만들려고했으나 양식이있는 (빈 페이지)가 표시되고 보고서가 생성 된 페이지는 표시되지 않습니다. 내가 만든 창을 닫으려고했는데 어디서 javascript를 써야할지 모르겠다. 내가 onload에 놓으면 폼이 제출되지 않고 창이 닫힙니다.

여기에 할 일에 대한 아이디어가 있으십니까?

편집 : 내가 여기서 한 일은 내가 필요한 결과를 얻는 최선의 방법이 아니 었습니다. 필자는 WebRequest를 사용하여 Reporting Services에서 양식을 게시하는 대신 Excel 보고서를 가져와 결국 두 번째 창을 필요로하지 않았습니다.

답변

3

브라우저를 닫지 마십시오. 사용자가 열어도 사용자에게 속합니다. 그것을 닫으면 화가 날 수 있습니다.
Do 페이지로 리디렉션하면 사용자가 윈도우로 완료되었음을 알립니다. 브라우저 창을 닫는 것이 일반적으로 쉽지만 원하는 경우 브라우저 닫기를 조금 더 쉽게 해주는 (자바 스크립트 기반) 링크를 제공 할 수 있습니다.

+0

창은 생성 된 양식을 SSRS에 게시하기 위해서만 생성되었습니다. 이상적으로는이 창을 전혀 필요로하지 않지만 사용자는 아무 것도하지 않습니다. – Ray

+0

여전히 창을 닫지 마십시오. 이렇게하면 성가신 문제가 발생할 수 있습니다. 사용자가 창 팝업을보고 본능적으로 닫으려고하지만 window.close() 호출 후 클릭하면 해당 클릭이 다음 활성 창에서 커서 아래에있는 것으로 전달됩니다 . – eyelidlessness

1

사용자가 Excel 파일을 원할 때 다른 창을 팝업 할 필요가 없습니다. 나는 라디오 버튼이나 체크 박스와 같은 HTML 컨트롤에서 Excel 파일이나 HTML 보고서를 선택한다고 가정한다. 따라서, 아무것도하기 전에 해당 라디오 버튼/체크 박스의 값을 javascript로 확인하고 적절한 조치를 취하십시오. 예 :

function getReport(excelFormat) 
{ 
    if (excelFormat) 
     document.form1.target = '_blank'; 
    else 
     document.form1.target = '_self'; 
    document.form1.submit(); 
} 
+0

예, 이것이 제가 원하는 것입니다. 그러나 SSRS에 제출해야하는 모든 매개 변수를 함께 넣으려면 서버 측 코드가 필요합니다. 현재이 방법을 사용하고 있는데 SSRS에 게시 할 양식을 만드는 것입니다. 나는 이것이 내 접근 방식에서 잘못 될 것이라고 생각한다. – Ray

0

일반적으로 앱에서 만든 모든 팝업 창을 닫아도됩니다.

window.close 수행 할 수 있습니다() (윈도우가 스크립트에 의해 생성되지 않은 경우 확인 팝업 것이다).

창을 닫기 전에 다운로드가 성공하려면 서버 측 마법을 수행해야합니다. 서버가 진행중인 다운로드를 추적하고 팝업에서 AJAX를 통해 폴링하도록해야합니다 창을 엽니 다.

서버에서 완료되었다고 말하면 창을 닫을 수 있습니다.

2

그런데 팝업에 유용한 출력이 포함되어 있지 않으면 양식을 페이지 내의 작은 Iframe에 제출하면됩니다. 이렇게하면 프레임을 보이지 않게 할 수 있으므로 창을 닫을 필요가 없습니다.

1

단추가 Ajax 요청을 원래 페이지로 되 돌리고 숨겨진 필드 값을 얻으면 어떻게 될까? 그런 다음 자바 스크립트를 사용하여 숨겨진 필드가있는 페이지에 다른 양식을 구성하여 제출할 수 있습니다 (다운로드 옵션 포함).요청은 application/ms-excel 파일을 반환하므로 현재 페이지를 새로 고쳐서는 안되지만 다운로드가 계속 발생해야합니다. 버튼 클릭이 클라이언트 측 함수에서 false를 반환하여 포스트 백을 발생시키지 않았는지 확인해야합니다. 이것은 생성 된 양식의 게시물이 새 html 페이지가 아닌 다운로드로 끝나는 경우에만 작동한다는 점에 유의하십시오.

<script type="text/javascript"> 
    function submitReport(button) { 
     PageMethod.SubmitReport(onSuccess,onFailure,{ control: button }); 
    } 

    function onSuccess(values,ctx) { 
     var form = document.createElement('form'); 
     form.action = reporting-services.url; 
     form.method = 'post'; 
     document.body.appendChild(form); 
     .... add hidden fields to form from returned values 
     form.submit(); 
     document.body.removeChild(form); 
    } 

    function onFailure(error,ctx) { 
     ... pop up some error message.... 
    } 

    </script> 

    ... 

    <asp:Button runat="server" id="reportButton" ClientClick="submitReport(this);return false;" Text="Report" />