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

ASP.NET
ASP.NET下MVC设计模式的实现
ASP.NET中利用cookies保持客户端信息
有关TextBox中输入字符控制的一种解决办法
ASP.NET访问Oracle数据库的方法
追踪ASP.NET代码里的bug
在asp.net中为Web用户控件添加属性和事件
使用.NET实现断点续传
ASP.NET Whidbey中实现Provider
使用函数传递参数来执行数据库操作
ASP.NET中实现模版的动态加载
用Repeater控件显示数据
五种常见的ASP.NET安全缺陷
利用Treeview实现树形列表
将Asp.net页面输出为HTML
不走寻常路 设计ASP.NET应用程序的七大绝招
ASP.NET中的HTTP模块和处理程序
充分利用ASP.NET的三种缓存提高站点性能
在ASP.NET中使用Treeview控件和XML
ASP.NET+XML Web服务客户端创建Web服务
ASP.NET中不定级动态菜单的实现

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


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


            }

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