ASP.NET页面借助IFrame提交表单数据所遇到问题的解决方法分享
2011-10-25 00:00
1066 查看
首先看下面的代码片段,我们希望用户在点击页面上的Button时首先将数据提交到指定的第三方页面,然后再执行后台的Page_Load事件。
Form中的onsubmit事件在页面被提交时触发,此时首先执行WebGatewayDoubleSubmission脚本方法,在该方法中,将当前Form的action,onsubmit,target,method缓存到指定的变量中,然后将Form的action和target指向另一个页面进行提交,此时页面上的数据被Post到第三方页面。然后再使用页面上隐藏的IFrame来调用submitPostIframeSubmission方法,并将原先的Form进行提交。这里有一个问题,在上面的代码中有一行被注释掉了,原因就是直接使用IFrame的onload方法并不能触发该事件,从而导致submitPostIframeSubmission方法不能执行,页面的第二次提交不成功!使用eventPush方法可以有效地解决该问题。
同时,在服务端的Page_Load事件中,需要使用IsPostBack来判断页面是否被提交了:
相关资料:
http://www.4ucode.com/Study/Topic/1087401
http://wiki.operamasks.org/pages/viewpage.action?pageId=1835020
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 53608;
var cb_entryId = 2223947;
var cb_blogApp = "jaxu";
var cb_blogUserGuid = "882be06d-a307-de11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2011/10/25 15:30:00';
<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
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 53608;
var cb_entryId = 2223947;
var cb_blogApp = "jaxu";
var cb_blogUserGuid = "882be06d-a307-de11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2011/10/25 15:30:00';
相关文章推荐
- ASP.NET页面借助IFrame提交表单数据所遇到问题的解决方法分享
- ASP.NET页面借助IFrame提交表单数据所遇到的问题
- Asp.net MVC 2 中解决页面提交数据并发问题
- Asp.net MVC 2 中解决页面提交数据并发问题
- 用一个最简单方法解决asp.net页面刷新导致数据的重复提交
- 在 Asp.net MVC 2 中解决页面提交数据并发问题
- ASP.NET多个用户控件回车提交表单问题解决和获取用户控件上的ID方法
- 关于在用curl函数post网页数据时,遇上表单提交 type为submit 类型而且没有name和id时可能遇到的问题及其解决方法
- asp.net mvc利用Json验证数据和导向页面,解决重复提交问题
- 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决
- Asp.net MVC 2 中解决页面提交数据并发问题
- 工作中的问题解决 -- (win2003 asp.net) Session和带页面回传的方法无法正常使用解决方案
- 安装完vs.2005之后,重新安装iis后无法使用http方式访问asp.net工程的页面的问题的解决方法
- 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式问题的方法
- asp.net mvc 表单重复提交问题。如何解决呀?
- 解决asp.net表单提交按钮当设定OnClientClick事件后不再进行表单验证的问题
- Asp.net中的GridView导出遇到的两个问题和解决方法
- ASP.NET提交后页面字体变大及页面提示转向的解决方法
- ASP.NET提交后页面字体变大及页面提示转向的解决方法