2017-04-21 8 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ファイルとしてエクスポートすることにしたいです。 私は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>"); 
      } 
     } 

に次のコードを持っている私は、HTTPレスポンスのXMLフォーマットとしてグリッドデータを取得する代わりに、任意のファイルダウンロードを得ることはありません。 .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

を試しポストバックする必要があるファイルをダウンロードするには、から、この異なっていますそれは投稿ACK – Programmerzzz

+0

デフォルトでは更新パネルは非同期ポストバックを実装しているので、完全なポストバックが必要な場合はポストバックトリガを明示的に作成する必要があります – Krishna

+0

ありがとう、「Krishna」、これは私のために働いていました。 – Programmerzzz

関連する問題