我有一个带按钮的页面:
<button id="btnExport1" runat="server" class="btn btn-success" style="width: 120px;" OnServerClick="btnExport_Click">Export</button>
btnExport_Click方法准备一个Excel文件,然后使用以下代码将其发送到浏览器
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
var attachment = String.Format("attachment; filename=\"SR_ChargeExport_{0:yyyy-MM-dd_HH-mm-ss}.xlsx\"", DateExtensions.CurrentDisplayTime());
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.WriteFile(filename);
HttpContext.Current.Response.Flush();
if (deleteFile)
File.Delete(filename);
HttpContext.Current.Response.End();
页面上还有一个LinkButton,点击它时会在页面上运行一些javascript以打开Telerik RadWindow并传入新页面的URL。在这个页面上有一个LinkButton,如下所示:
<asp:LinkButton ID="btnUpdate" CssClass="btn btn-success" runat="server" OnClick="btnUpdate_Click"><span>Add Comment</span></asp:LinkButton>
在btnUpdate_Click中有一些基本上保存评论并关闭RadWindow的代码。
我遇到的问题是,在您单击“导出”按钮下载文件后,如果您通过单击RadWindow中的按钮添加注释,则会下载另一个Excel文件。 AddComment代码确实运行,但随后导出代码会再次运行。我认为这与在导出代码中写入浏览器后无法回发到页面有关。
答案 0 :(得分:0)
通过HTTP处理程序使您的Excel下载请求异步,因此您可以这样做:
标记:
<a href="#" class="btn btn-success"
src="PATH_TO_YOUR\HTTP_HANDLER.ashx">Export</a>
ExportToExcelHandler.ashx:
public class ExportToExcelHandler : IHttpHandler {
public void ProcessRequest (HttpContext context)
{
context.Response.AddHeader("content-disposition","attachment; filename=excelData.xls");
context.Response.ContentType = "application/ms-excel";
// Put logic here to create Excel download
// Stream it back to browser
}
public bool IsReusable
{
get
{
return false;
}
}
}
答案 1 :(得分:0)
经过进一步调查后,我发现有一些javascript正在为RadWindow的OnClientClose事件运行。在那里,它提交了表单(为了更新页面上的评论),所以我把它改成了一个&#39; location.reload()&#39;代替。