ASP.NET页面借助IFrame提交表单数据所遇到的问题

简介:

首先看下面的代码片段,我们希望用户在点击页面上的Button时首先将数据提交到指定的第三方页面,然后再执行后台的Page_Load事件。

复制代码
< body >
     < iframe  id ="WebGatewaySubmissionProcessor_IFrame"  name ="WebGatewaySubmissionProcessor_IFrame"  style ="display: none;" ></ iframe >
     < form  onsubmit ="javascript:if (typeof WebGatewayDoubleSubmission != 'undefined') {WebGatewayDoubleSubmission(this);}"  id ="Form1"  runat ="server" >
     < div  id ="page" >
             < asp:Button  ID ="BtnClientSend"  runat ="server"    />
    </ div >
   < script  type ="text/javascript"  id ="WebGatewayScript" >
    WebGatewayDoubleSubmission 
=   function (o) {
        
var  oldAction  =  o.action;
        
var  oldOnSubmit  =  o.onsubmit;
        
var  oldTarget  =  o.target;
        
var  oldMethod  =  o.method;
        
var  iframeSubmisionTarget  =  document.getElementById( " WebGatewaySubmissionProcessor_IFrame " );

        
var  submitPostIframeSubmission  =   function () {
            o.action 
=  oldAction;
            o.target 
=  oldTarget;
            o.method 
=  oldMethod;
            o.onsubmit 
=  oldOnSubmit;
            o.submit();
        };
        
/* iframeSubmisionTarget.onload = submitPostIframeSubmission; */
        eventPush(iframeSubmisionTarget, 
' load ' , submitPostIframeSubmission);

        o.action 
=   " http://webgateway.hostedmscrm.com/V2/formprocessor.aspx " ;
        o.target 
=   " WebGatewaySubmissionProcessor_IFrame " ;
        o.onsubmit 
=   null ;
        o.method 
=   " POST " ;
        o.submit();
    };
    
    WebGatewaySubmission 
=   function (o) {
        o.action 
=   " http://webgateway.hostedmscrm.com/V2/formprocessor.aspx " ;
        o.method 
=   " POST " ;
    };

    
function  eventPush(obj, event, handler) {
        
if  (obj.addEventListener) {
            obj.addEventListener(event, handler, 
false );
        } 
else   if  (obj.attachEvent) {
            obj.attachEvent(
' on '   +  event, handler);
        }
    }
   </ script >
 </ form >
</ body >
复制代码

Form中的onsubmit事件在页面被提交时触发,此时首先执行WebGatewayDoubleSubmission脚本方法,在该方法中,将当前Form的action,onsubmit,target,method缓存到指定的变量中,然后将Form的action和target指向另一个页面进行提交,此时页面上的数据被Post到第三方页面。然后再使用页面上隐藏的IFrame来调用submitPostIframeSubmission方法,并将原先的Form进行提交。这里有一个问题,在上面的代码中有一行被注释掉了,原因就是直接使用IFrame的onload方法并不能触发该事件,从而导致submitPostIframeSubmission方法不能执行,页面的第二次提交不成功!使用eventPush方法可以有效地解决该问题。

同时,在服务端的Page_Load事件中,需要使用IsPostBack来判断页面是否被提交了:

复制代码
protected  void Page_Load( object sender, EventArgs e)
{
      if (Page.IsPostBack)
     {
          // TODO:
     }
}
复制代码

相关资料:

http://www.4ucode.com/Study/Topic/1087401 

http://wiki.operamasks.org/pages/viewpage.action?pageId=1835020 


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/archive/2011/10/25/2223947.html,如需转载请自行联系原作者


相关文章
|
6月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
|
3月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
47 5
|
13天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
32 2
|
6月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
124 7
|
3月前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
3月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
4月前
|
开发框架 JSON 前端开发
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
|
3月前
|
开发框架 前端开发 算法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
|
6月前
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
6月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据