无需ajax刷新父页面的控件的值(ie/firefox)(downmoon原创)

本文介绍了一种使用IFrame在父页面中局部刷新指定控件的方法,演示了如何在子页面通过JavaScript修改父页面的TextBox控件值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《.net2.0中新增的Substitution控件--动态更新缓存页的部分(也可用于局部刷新) 》一文中,可以局部缓存页面的部分内容,这在.net2.0中是新增的一个功能。
另外一个常见的应用是在Iframe页面中刷新父页面的某个控件(TextBox或Label等)的值。
这里邀月介绍一种简单的做法:在ie8/Firefox3.5下测试通过
共两个页面,一个master.aspx,一个masterdetail.aspx页面。
其中master.aspx的内容如下:


<%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>父页面的控件值由Iframe刷新</title> <mce:script type="text/C#" runat="server"><!-- protected void Page_Load(object sender, EventArgs e) { txtOrgTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); } // --></mce:script> </head> <body> <form id="form1" runat="server"> <div> <iframe src="masterdetail.aspx" mce_src="masterdetail.aspx" width="480" height="41" frameborder="0" style="background-color: #EFEFEF" mce_style="background-color: #EFEFEF"> </iframe> </div> <div> 刷新时间: <asp:TextBox ID="txtTime" runat="server" Visible="true" Style="width: 240px; height: 20px;" mce_Style="width: 240px; height: 20px;"></asp:TextBox> <br /> 原始时间: <asp:TextBox ID="txtOrgTime" runat="server" Visible="true" Style="width: 240px; height: 20px;" mce_Style="width: 240px; height: 20px;"></asp:TextBox> </div> </form> </body> </html>

masterdetail.aspx的内容如下:

<%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>即将刷新父页面的控件值</title> <mce:script language="javascript" type="text/javascript"><!-- function doReturn(valCurrentTime) { parent.document.forms[0].elements["txtTime"].value = valCurrentTime; } // --></mce:script> <mce:script type="text/C#" runat="server"><!-- protected void btn_Refresh_Click(object sender, EventArgs e) { string m_script = @"<script language=Javascript>doReturn('{0}');<" + @"/script>"; m_script = string.Format(m_script, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "getTime", m_script); } // --></mce:script> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="btn_Refresh" Text="我在IFrame页面刷新父页面的时间" runat="server" OnClick="btn_Refresh_Click"> </asp:Button> </div> </form> </body> </html>



显示效果:





需要注意的是:
如果是在master模板页面或ascx文件的方式,则需要将
parent.document.forms[ 0 ].elements[ " txtTime " ].value = valCurrentTime;
改成
parent.document.forms[ 0 ].elements[ " 浏览器中源码显示的 input的ID" ].value = valCurrentTime;

补充:有朋友提到性能问题:
经测试,当master.aspx页面有2000个TextBox(比如GridView)时,回刷页面确实比较有些延迟。
将上面的脚本改为:

<!-- {cps..2}--> function doReturn2(valCurrentTime) { var ObjectControl = parent.document.getElementById("txtTime"); //alert(ObjectControl); if (null != ObjectControl) { ObjectControl.value = valCurrentTime; } }


发现还是比较慢,不知道有没有更也的解决方案?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值