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

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';

(0)

相关推荐

  • ASP.NET 链接 Access 数据库路径问题最终解决方案

    当做小项目用 ASP.NET + Access 数据库时,总是遇到数据库路径问题,本人以前的解决方法是每次访问数据库时,把链接字符串以参数的形式传到数据访问层,实施起来相当麻烦,这次找到了一个比较好的方案,这是本人目前的最终解决方案(如题)  ^_^ 解决方案为: 在 Web.Config 中配置 Access 数据库驱动和数据库文件名称. 请看代码 <appSettings>     <add key="DBDriver" value="Provider=

  • ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容

    ASP.NET中iframe框架点击左边页面链接,右边则显示链接页面内容,具体实现内容如下 先看看效果图: 首先是主页面main.aspx <body style="background-color: #AFEEEE"> <form id="form1" runat="server"> <div> <center> <h1> 后台管理界面 </h1> <span sty

  • asp.net 学习之路 项目整体框架简单的搭建

    最近刚学了些关于asp.net mvc方面的知识,于是了要拿个小项目来练练手,提高下自己的code能力跟思维能力.在此之前做东西都很简单,直接用动软那一套生成代码,生成一个简单的三层架构作为项目整体的框架,数据库访问层用的是ado.net.这么做了感觉挺麻烦,如果要项目要换数据库,要给数据库增加表或者给表增加某个字段,或者不使用ado.net用个orm框架来访问数据库等等,这样整体项目该动起来就提别的麻烦,为了解决这一些问题我们需要重新思考怎么搭建. 关于数据库访问层 数据库访问驱动层--大家都

  • asp.net中MVC借助Iframe实现无刷新上传文件实例

    本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法.分享给大家供大家参考.具体实现方法如下: html: 复制代码 代码如下: <div id="uploadwindow" style="display: none;">     <form action="/ShopActivitys/ImportActivityItems" id="form1" name="form1&

  • asp.net实现生成静态页并添加链接的方法

    本文以实例讲解了asp.net实现生成静态页并添加链接的方法,非常实用的功能,通过本实例可以加深读者对于asp.net下文件操作的认识. 1.创建一个静态网页模板 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

  • asp.net GridView中超链接的使用(带参数)

    方法1.使用<a>标签, 前台: 复制代码 代码如下: <a href='<%# "OrigImageShow.aspx?id=1&image_id="+Eval("ID")%>' id="tb_search" runat="server" target="_blank">  弹出  </a> <a href='Javascript:alert(

  • asp.net在iframe中弹出信息并执行跳转问题探讨

    复制代码 代码如下: /// <summary> /// iframe 中,弹出信息并跳转 /// </summary> /// <param name="msg"></param> /// <param name="targetPageName"></param> public static void ResponseShowMsg(string msg, string targetPageN

  • asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输

    具体我们如何实现文件的异步刷新,目前网上已经有了很多文章来解决这个问题,但是会用到大量的javascript,由于本人编码功力尚浅,所以之今没有高清其中的所以然,但是在解决的方案中他们貌似都用到了iframe,这让我茅塞顿开,所以我就说说用这个处理刷新的思路. 首先一个实际的页面中往往是会有较多的内容,我们暂时把它分为A,B两个区域,A区域是内容区域,我们可以用updatepanel来实现异步刷新,B区域是上传区域,我们用div已经ifame占位,其中上传的具体功能实现我们可以放到C页面中,这样

  • asp.net省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例

    本文主要列举了省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例.前段时间需要作一个的Web前端应用,需要用多个框架,一个典型的应用场景是省市三级联动,基于此应用,特将三种主要的ajax框架略作整理,方便有需要的朋友查阅. 在示例之前,我们先设置一个演示数据源,新建一个项目,项目结构如图: 主要文件如下:AreaModel.cs: 复制代码 代码如下: using System; using System.Collections.Generi

  • ASP.NET中使用IFRAME建立类Modal窗口

    我们经常要在程序的人机交互中用到模态窗口,但在B/S开发中,这一切变得不容易了,虽然也可以用window.showModalDialog函数实现(见http://dotnet.aspx.cc/ShowDetail.aspx?id=49ML4AO8-5PB3-4KNY-NJZD-LJOIOXV4M1X4),但多数用起来麻烦,还要为了回传值用Frameset建立2个无用的窗口.不爽! 我发现可以尝试在初始页面中嵌入一个IFRAME,然后用IFRAME来显示一个页面,并将IFRAME设定为按绝对位置摆

随机推荐