2017-04-21 2 views
0

다음과 같이 정의 된 사용자 정의 컨트롤이 있습니다. Home_ExportExcel을 클릭하면UpdatePanel을 사용하여 UserControl에서 파일 다운로드

 <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <table> 
       <tr> 
        <td> 
         <asp:ImageButton ID="ImageButton" runat="server" /> 
        </td> 
        <td> 
         <asp:Label ID="lblHeader" runat="server" Text=""></asp:Label> 
        </td> 
       </tr> 
      </table> 
      <asp:Button runat="server" ID="saveLayoutBtn" Text="Save" OnClick="SaveBtn_Click" 
       ToolTip="Save current grid layout" /> 
      <asp:Button ID="Home_ExportExcel" runat="server" Text="Export To Excel" OnClick="Home_ExportExcel_Click" Visible="false" /> 
      <asp:PlaceHolder ID="placeHolder" runat="server"></asp:PlaceHolder> 
      <asp:Label ID="notificationLbl" runat="server" Text="" Font-Bold="true"></asp:Label> 
      <div id="DataGridWrapper"> 
<!--A Grid View tat displays Data--> 
    </div> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

지금, 나는 GridDtata가 엑셀/XML 파일로 내보낼 수 싶습니다. 내가 대신 내가 HTTP 응답에 XML 형식으로 그리드 데이터를 얻을, usercontrol.ascx.cs

protected void Home_ExportExcel_Click(object sender, EventArgs args) 
     { 
GenerateWorkSheetWithSB(resultTbl, this.MasterPage.CurrentLibrary); 
     } 
public void GenerateWorkSheetWithSB(DataTable resultRequests, string libName, string advancedSearch = null) 
     { 
      WindowsImpersonationContext impersonationContext; 
      if (BLSecurity.ImpersonateFacelessAccount(out impersonationContext)) 
      { 
       int iWorkSheet = 1, iCol = 1, iRow = 1; 
       System.Text.StringBuilder strExcelXml = new System.Text.StringBuilder(); 
       try 
       { 
        iWorkSheet = 1; 
        iCol = 15; 
        iRow = resultRequests.Rows.Count + 1; 
        iWorkSheet++; 
        iRow++; 
        iCol++; 
       } 
       catch (Exception ex) 
       { 

       } 

       //First Write the Excel Header 
       strExcelXml.Append(ExcelHeader()); 
       // Get all the Styles 
       strExcelXml.Append(ExcelStyles()); 
       // Worksheet options Required only one time 
       strExcelXml.Append(ExcelWorkSheetOptions()); 

       for (int i = 1; i < iWorkSheet; i++) 
       { 
        // Create First Worksheet tag 
        strExcelXml.Append("<Worksheet ss:Name=\"WorkSheet" + i.ToString() + "\">"); 
        // Then Table Tag 
        strExcelXml.Append("<Table ss:DefaultColumnWidth=\"150\" >"); 


         SetupExcelHeaderWorksheet(strExcelXml, libName); 
         foreach (DataRow row in resultRequests.Rows) 
         //foreach (DataRow row in resultRequests.Rows) 
         SetupExcelDataWorksheet(strExcelXml, row, libName); 
        strExcelXml.Append("</Table>"); 
        strExcelXml.Append("</Worksheet>"); 
       } 
       // Close the Workbook tag (in Excel header you can see the Workbook tag) 
       strExcelXml.Append("</Workbook>\n"); 

       #region "Write Into File" 
       string uploadTempPath = "D:"; //ProfileBroker.GetProfileValue(AppProfileConst.UPLOAD_SERVER_TEMPPATH); 
       string tmpFilePath = uploadTempPath + "\\HomeGridData.xml"; 
       string convertData = ConvertHTMLToExcelXML(strExcelXml.ToString()); 
       byte[] byteArray = Encoding.UTF8.GetBytes(convertData); 
       //MemoryStream stream = new MemoryStream(byteArray); 
       File.WriteAllBytes(tmpFilePath, byteArray); 

       //this.Page.Response.Buffer = true; 
       this.Page.Response.Clear(); 
       this.Page.Response.AddHeader("content-disposition", "attachment; filename=" + Path.GetFileName(tmpFilePath)); 
       this.Page.Response.ContentType = "application/octet-stream"; 
       this.Page.Response.TransmitFile(tmpFilePath); //does not work inside WARP unless there is JS, refer to ascx file 
       this.Page.Response.End(); 
       #endregion 
       SecurityUtils.UndoImpersonation(impersonationContext); 

      } 
      else 
      { 
       Response.Write("<script>alert('File does not exist. Please contact tool support.')</script>"); 
      } 
     } 

내가 어떤 파일이 다운로드되지 않습니다에 다음과 같은 코드가 있습니다. .aspx 페이지에서 동일한 코드를 사용하면 제대로 작동하고 파일이 다운로드됩니다. thisthis이 (가) SO에서 발견되었으며 UpdatePanel을 사용하면 문제가 될 수 있습니다. 그러나 나는 무엇이 내가 여기에서 놓치고 있는지 명확하지 않다.

답변

0

우리가 나는 response..How을 얻고로 내보내기 버튼을 클릭하면 게시물이 다시 지금 일어나고 Ok..But이

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <table> 
      <tr> 
       <td> 
        <asp:ImageButton ID="ImageButton" runat="server" /> 
       </td> 
       <td> 
        <asp:Label ID="lblHeader" runat="server" Text=""></asp:Label> 
       </td> 
      </tr> 
     </table> 
     <asp:Button runat="server" ID="saveLayoutBtn" Text="Save" OnClick="SaveBtn_Click" 
      ToolTip="Save current grid layout" /> 
     <asp:Button ID="Home_ExportExcel" runat="server" Text="Export To Excel" OnClick="Home_ExportExcel_Click" Visible="false" /> 
     <asp:PlaceHolder ID="placeHolder" runat="server"></asp:PlaceHolder> 
     <asp:Label ID="notificationLbl" runat="server" Text="" Font-Bold="true"></asp:Label> 
     <div id="DataGridWrapper"> 
<!--A Grid View tat displays Data--> 
</div> 
</ContentTemplate> 
<Triggers> 
    <asp:PostBackTrigger ControlID="Home_ExportExcel" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

을 시도 다시 게시 할 필요가 파일을 다운로드하려면에서이 다르다 that ack – Programmerzzz

+0

기본적으로 업데이트 패널은 비동기 포스트 백을 구현합니다. 따라서 전체 포스트를 원한다면 명시 적으로 포스트 백 트리거를 생성해야합니다. – Krishna

+0

감사합니다. 'Krishna'는 저에게 효과적이었습니다. – Programmerzzz