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

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

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


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


            }

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