单击页面上的另一个按钮时,将重复写入浏览器

时间:2013-12-09 12:59:56

标签: asp.net telerik

我有一个带按钮的页面:

<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();

页面上还有一个LinkBut​​ton,点击它时会在页面上运行一些javascript以打开Telerik RadWindow并传入新页面的URL。在这个页面上有一个LinkBut​​ton,如下所示:

<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代码确实运行,但随后导出代码会再次运行。我认为这与在导出代码中写入浏览器后无法回发到页面有关。

2 个答案:

答案 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;代替。