当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 使用Ajax后,原来导出功能失败的解决方法

ASP.NET
.net基础知识错误注意二十二点知识
用.NET动态创建类的实例讲解
微软发布.NET Framework 3.5 SP1正式版
asp.net教程:HTTP状态码200,301,302
.NET 2.0中Hashtable快速查找的方法
在ASP.Net Ajax中调用WebService
asp.net 和 access 联合开发的分页类
ASP.NET 全局异常处理
用SQL语句完成SQL Server数据库的修复
.net 框架程序设计
ASP.NET结合XML编写计数器
ASP.NET水晶报表实现打印功能
Asp.Net中设计与使用水晶报表
防止ASP.NET按钮多次提交的办法
.NET开发事件处理的步骤
ASP.NET刷新页面的六种方法
Asp.net ajax实现任务提示页面
ASP.NET 2.0中XML数据的处理
ASP.NET中XML数据的处理
Jadu: 将 PHP 编译成 .NET

ASP.NET 中的 使用Ajax后,原来导出功能失败的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 95 ::
收藏到网摘: n/a

问题描述:我们的产品在Ajax后(使用微软的UpdatePanel),其中的导出功能出现错误。因为导出功能使用了Response直接输出内容,而Ajax的异步方式对此不能解析导致出现错误。

解决过程:在网上找了一下,可以使用这个 http://forums.microsoft.com/china/ShowPost.aspx?PostID=2732578&SiteID=15  的方法来解决。但是,如果你的按钮时动态创建的,或者在模板中,这个帖子的方法也不能解决问题。 这个里面的内容虽然没有能解决我的问题,但是给了我一个思路,既然不能使用Ajax的方式来请求,那么就使用PostBack的方式。

解决方法:

以下为引用的内容:

     1、原来的导出按钮增加 OnClientClick事件。
        btnExport.OnClientClick = "return AutoForm_Export('PostBackEventTarget_IsExport');";
     2、客户端增加javascript函数AutoForm_Export。
        function AutoForm_Export(postBackEventTarget)
        {
           WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(postBackEventTarget, "", true, "", "", false, true))    ;          
            return false;
        }
     3、在服务器端根据Request["__EVENTTARGET"] 来判断是否是导出事件。注意下面红色字体的注释   
        if (Page.Request["__EVENTTARGET"] != null)
        {
                        bool isInAsyncPostBack = false;
                        ScriptManager sm = ScriptManager.GetCurrent(Page);
                        if (sm != null)
                        {
                            isInAsyncPostBack = sm.IsInAsyncPostBack;
                        }
                        if (isInAsyncPostBack )
                        {
                            /*
                            一定要进行判断是否是使用Axaj进行异步请求,否则在点击导出按钮以后,再进行其它Ajax请求, Page.Request["__EVENTTARGET"] 会保留原来的值,这样就错误判断了。
                            */
                            _isExport = false

                        }
                        else
                        {
                            string postBackEventTarget = Page.Request["__EVENTTARGET"].ToString();
                            if (postBackEventTarget == "PostBackEventTarget_IsExport")
                            {
                                _isExport = true;
                            }
                            else
                                _isExport = false;
                        }
                    }
                    else
                        _isExport = false;


            }

其他:暂时没有找到其他的方法,如果您有更好的方法,请多多指教!