2013-07-30 2 views
2

ModalPopup에서 파일 다운로드를위한 (비즈니스 규칙 기반) 파일 이름을 제안하는 특정 동작을 찾고 있습니다. 파일 보내기 후 ModelPopup 닫기

enter image description here

사용자가 [확인]을 클릭하면

는 파일이 다운로드되며, 팝업 닫아야합니다. 취소하면 방금 닫힙니다. 이 모든 뒤에 코드에 의해 구동 :

protected void ExportPromptOkButton_Clicked(object sender, EventArgs e) 
{ 
    string path = MapPath(ExportPromptPanelFileName.Text); 
    WriteExport(path); 
    ExportPromptModalPopupExtender.Hide(); 
    this.SendFile(path, "text/plain"); 
} 

//... 

public static void SendFile(this Page webPage, string filepath, string contenttype) 
{ 
    webPage.Response.AddHeader("Content-disposition", "attachment; filename=" + Path.GetFileName(filepath)); 
    webPage.Response.ContentType = contenttype; 
    webPage.Response.WriteFile(filepath);; 
    webPage.Response.End(); 
} 

문제는 Response.End(); 모든 조치를 (물론, 예상대로) 죽이고, 그래서 모달 창 자체가 닫히지 않습니다 것입니다.

올바른 접근 방법은 무엇입니까? iframe을 사용하여 파일을 보내려는 Response을 호출하려고했지만 이것이 적절한 지 또는 더 나은 것이 있는지 확인하고 싶습니다.

ASPX 선언 : ModalPopup에

을 같이

<ajaxToolkit:ModalPopupExtender 
    runat="server" 
    ID="ExportPromptModalPopupExtender" 
    BackgroundCssClass="modalBackground" 
    TargetControlID="ExportButton" 
    PopupControlID="ExportPromptPanel" 
    PopupDragHandleControlID="ExportPromptPanelHeader" 
    CancelControlID="ExportPromptCancelButton" 
    Drag="true"> 
</ajaxToolkit:ModalPopupExtender> 
<asp:Panel ID="ExportPromptPanel" runat="server" CssClass="popupConfirmation" style="display: none;"> 
    <div class="popupContainer" style="width:300px"> 
     <div class="popupHeader" id="ExportPromptPanelHeader"> 
      <div class="popupHeaderLeft">Export</div><div class="popupHeaderRight"></div> 
     </div> 
     <div class="popupBody">Export under the following name:<br /> 
     <asp:TextBox ID="ExportPromptPanelFileName" runat="server" MaxLength="60" Width="230px"></asp:TextBox></div><div class="popupButtons"> 
      <asp:Button ID="ExportPromptOkButton" runat="server" Text="Ok" OnClick="ExportPromptOkButton_Clicked" /> 
      <asp:Button ID="ExportPromptCancelButton" runat="server" Text="Cancel" /> 
     </div> 
    </div> 
</asp:Panel> 

답변

2

당신은 확인 버튼을 클릭하고 (모달 팝업 익스텐더 확인에서 포스트 백을 방지하고 제어 취소) 자바 스크립트 확인 버튼에서 포스트 백을 강제 기능을 사용자 정의에 대한 OnOkScript 특성에 팝업을 숨길 연장의 OkControlID 속성을 설정할 수 있습니다.

<script type="text/javascript"> 
    function doExport() { 
     __doPostBack("<%= ExportPromptOkButton.UniqueID %>", ""); 
    } 
</script> 


<ajaxToolkit:ModalPopupExtender 
    runat="server" 
    ID="ExportPromptModalPopupExtender" 
    BackgroundCssClass="modalBackground" 
    TargetControlID="ExportButton" 
    PopupControlID="ExportPromptPanel" 
    PopupDragHandleControlID="ExportPromptPanelHeader" 
    CancelControlID="ExportPromptCancelButton" 
    OkControlID="ExportPromptOkButton" 
    OnOkScript="doExport" 
    Drag="true"> 
</ajaxToolkit:ModalPopupExtender> 
+0

제게는 효과가 있습니다 .. 고마워요. :) – Syed

1

당신은 전화 모달 팝업에서 HTTP 처리기를 요청 을 처리하는 seprate HTTP 처리기를 만들 필요가 :

protected void Click(object sender, EventArgs e) 
    { 
     Response.Redirect("Handler1.ashx", true); 
    } 

in Handler1.ashx

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Clear(); 
     context.Response.ContentType = "application/vnd-ms.excel"; 
     context.Response.AddHeader("content-disposition", "attachment;Filename=test.xls"); 
     context.Response.WriteFile(filepath); 
     context.Response.Flush(); 
     context.Response.End(); 
    } 
+0

나는 지금 그것에 관해 읽고있다. 나는 당신이'context' 또는'webPage'를 사용하여 충돌하는 것을 보았습니다. 알아 냈어. URL에 파일 경로를 추가하고있다. – MPelletier

+0

예, 죄송합니다. context.response.write (file);이어야합니다. – Shaz

+0

흠, 뭔가 잘못되었습니다. 모달은 여전히 ​​닫히지 않습니다. 이전과 같은 동작. – MPelletier

0

ModalPopupExtender.hide()를 사용해 보셨습니까!

+0

네, 코드 샘플에 나와 있습니다. – MPelletier