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

ASP.NET
.NET框架类库中的定时器类的使用
net得到本地电脑基本信息的简单方法
如何通过ASP.NET页面重启服务器
.net开发工具LINQ框架设计指南
.net ajax 与Ext2框架在.net程序中的应用
.Net上传图片按比例自动缩小或放大
.NET的死锁调试工具:ACorns.Debugging
ADO在vb.net中的使用(与datagrid结合)
Visual C++中实现双缓冲的基本原理
.net App中集成COM组件的一些简单技巧
vb.net通过app.config来改变编译路径
实例了解Asp.Net的继承和多态性
asp.net里导出excel表方法汇总
ASP.NET上传大于4M的文件的相关设置
.Net开发漫谈:关于命名空间和目录划分
.Net(C#)开发漫谈:关于变量的命名和属性
.Net新手学堂:Lambda表达式的一般应用
故障解析:.NET开发正则表达式中BUG一例
一步一步安装VB.Net(图片较多,请稍等)
关于用VB做更漂亮的窗体的思考

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 82 ::
收藏到网摘: 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;


            }

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