我需要使用模态弹出扩展程序对象来允许用户从服务器下载文件。用户单击按钮以显示弹出窗口,提供一些输入并按下扩展器中嵌入的面板上的提交按钮。然后生成并下载该文件。所有这一切现在都很完美。我遇到的唯一问题是在用户点击提交后再次隐藏弹出窗口。我有一个清晰的事件设置,代码遍历,如果我注释掉下载代码,它隐藏正确。这是我的代码:
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>
 
</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>
 
</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>
 
</td>
<td>
<dnr:Number ID="txtMailMergeRowCount" Field="" Name="Mail Merge Row Count" runat="server" ReadOnly="true" />
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnSubmitMailMerge" OnClick="BtnSubmitMailMerge_Click" Enabled="false" Text="Submit" runat="server" />
</td>
<td>
 
</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();
}
任何人都可以给我的帮助真的很感激。