强制页面模式弹出窗口隐藏文件下载(ASP.NET C#)

时间:2014-09-18 19:28:12

标签: c# asp.net modalpopupextender

我需要使用模态弹出扩展程序对象来允许用户从服务器下载文件。用户单击按钮以显示弹出窗口,提供一些输入并按下扩展器中嵌入的面板上的提交按钮。然后生成并下载该文件。所有这一切现在都很完美。我遇到的唯一问题是在用户点击提交后再次隐藏弹出窗口。我有一个清晰的事件设置,代码遍历,如果我注释掉下载代码,它隐藏正确。这是我的代码:

ASP页面:

<act:ModalPopupExtender ID="mpeMailMerge" runat="server" PopupControlID="pnlMailMerge" TargetControlID="btnGenerateMailMerge" BackgroundCssClass="modalBackground" />
<asp:Panel ID="pnlMailMerge"  CssClass="modalPopup" style="width:300px" runat="server">
    <asp:UpdatePanel ID="upMailMerge" runat="server">
        <ContentTemplate>
        <asp:HiddenField ID="hfIsSubmitted" Value="" runat="server" />
        <table>
            <tr>
                <td>
                    <h3>What woud you like to do?</h3>
                </td>
            </tr>
            <tr>
                <td>
                    <table>
                        <tr>
                            <td>
                                <dnr:CheckBox ID="chkFirstMailMergeGeneration" Field="" Name="First Mail Merge Generation" runat="server" OnCheckedChanged="MailMergeCheckBoxChange" AutoPostback="true"/>
                            </td>
                            <td>
                                First Mail Merge Generation
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <dnr:CheckBox ID="chkSubsequentGenerations" Field="" Name="Subsequent Generations" runat="server" OnCheckedChanged="MailMergeCheckBoxChange" AutoPostback="true" />
                            </td>
                            <td>
                                Subsequent Generations
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr>
                <td>
                    <table>
                        <tr>
                            <td>
                                <dnr:Label ID="lblSubsequentMailMergeCount" For="txtSubsequentMailMergeCount" runat="server" />
                            </td>
                            <td>
                                &nbsp
                            </td>
                            <td>
                                <dnr:Number ID="txtSubsequentMailMergeCount" DecimalDigits="0" Field="" Name="Generation Number " runat="server" Enabled="false" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr>
                <td>
                    <table>
                        <tr>
                            <td>
                                &nbsp
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <asp:Button ID="btnCountOfRowsToBeGenerated" Text="Generate Row Count" Name="Count of Rows to be generated" runat="server" Enabled="false" OnClick="BtnCountOfRowsToBeGenerated_Click" AutoPostback="true"/>
                            </td>
                            <td>
                                &nbsp
                            </td>
                            <td>
                                <dnr:Number ID="txtMailMergeRowCount" Field="" Name="Mail Merge Row Count" runat="server" ReadOnly="true" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                &nbsp
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <asp:Button ID="btnSubmitMailMerge" OnClick="BtnSubmitMailMerge_Click" Enabled="false" Text="Submit" runat="server" />
                            </td>
                            <td>
                                &nbsp
                            </td>
                            <td>
                                <asp:Button ID="btnCancelMailMerge" OnClick="BtnCancelMailMerge_Click" Text="Cancel" runat="server" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnCountOfRowsToBeGenerated" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="chkFirstMailMergeGeneration" EventName="CheckedChanged" />
            <asp:AsyncPostBackTrigger ControlID="chkSubsequentGenerations" EventName="CheckedChanged" />
            <asp:PostBackTrigger ControlID="btnSubmitMailMerge" />
            <asp:PostBackTrigger ControlID="btnCancelMailMerge" />
        </Triggers>
    </asp:UpdatePanel>
</asp:Panel>

C#背后:

protected void BtnSubmitMailMerge_Click(object sender, EventArgs e)
    {
        if (this.chkFirstMailMergeGeneration.Checked || this.chkSubsequentGenerations.Checked)
        {
            MailMergeGenerator gen = new MailMergeGenerator();
            if (this.chkFirstMailMergeGeneration.Checked)
            {
                // File download method
                gen.DownloadMailMerge(0, this.Context);
            }
            else if (this.chkSubsequentGenerations.Checked)
            {
                // File download method
                gen.DownloadMailMerge((int)this.txtSubsequentMailMergeCount.Value, this.Context);
            }
            this.BtnCancelMailMerge_Click(null, null);
        }
    }

public void DownloadMailMerge(int timesGenerated, HttpContext context)
    {
        System.Linq.IQueryable<MailMergeReport> report = this.GetMailMergeReport(timesGenerated);

        // export report
        FileInfo file = new FileInfo("/MailMerge.xlsx");
        ExcelPackage excelPackage = new ExcelPackage(file);

        context.Response.AddHeader("Content-Disposition", "attachment;filename=\"MailMerge.xlsx\"");//cause Save As prompt
        context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//set the document MIME type
        context.Response.Expires = -1;
        context.Response.BinaryWrite(excelPackage.GetAsByteArray());
        context.Response.Flush();
        context.Response.Close();
    }

任何人都可以给我的帮助真的很感激。

0 个答案:

没有答案