关于 Response.end() 一点想法

使用  Response.end() 会产生ThreadAbortException 的异常。 试着要解决该问题。

我产生该问题的场景是: GridView  导出为Excel  涉及代码为:

 StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            Page page = new Page();
            HtmlForm form = new HtmlForm();

            ctl.EnableViewState = false;

            page.EnableEventValidation = false;

            page.DesignerInitialize();

            page.Controls.Add(form);
            form.Controls.Add(ctl);

            page.RenderControl(htw);

            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8) + ".xls");
            Response.Charset = "UTF-8";
            Response.ContentEncoding = Encoding.Default;
            Response.Write("<html>");
            Response.Write("<head><meta http-equiv=/"Content-Type/" contect=/"text/html/";charset=gb2312/"></head>");
            Response.Write(sb.ToString());
            Response.Write("</html>");
            Response.End();

注意使用该方法 GridView 不能隐藏, 否则form.Controls.Add(ctl);为空字符

不管如何,都会产生该异常。

在网上找了好几个小时,都没有解决该问题, 只能用try{}catch{}将导出代码包起来。算是把问题处理了, 但这样处理毕竟不尽人意。

 

网上有说: 用HttpContext.Current.ApplicationInstance.CompleteRequest();取代Response.End(); 但是没有用。(该方法不会终止一个请求)

具体解释为:

           “利用HttpModule通过调用HttpApplication.CompleteRequest()方法实现当满足某一个条件时终止此次的HTTP请求。需要注意的是,即使调用了HttpApplication.CompleteRequest()方法终止了一个HTTP请求,ASP.NETFramework仍然会触发HttpApplication后面的这3个事件:EndRequest事件、PreSendRequestHeaders事件、PreSendRequestContent事件。”

 

        而且在end()更改的页面提示信息无法发送到客户端。

 

困惑呀!  只能把该问题记下来,找机会在解决!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值