zoukankan      html  css  js  c++  java
  • 无需ajax刷新父页面的控件的值(ie/firefox)(downmoon原创)

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

     1 <%@ Page Language="C#" AutoEventWireup="true" %>
     2 
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     4 <html xmlns="http://www.w3.org/1999/xhtml">
     5 <head runat="server">
     6     <title>父页面的控件值由Iframe刷新</title>
     7 
     8     <script type="text/C#" runat="server">
     9         protected void Page_Load(object sender, EventArgs e)
    10         {
    11             txtOrgTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
    12         }
    13     </script>
    14 
    15 </head>
    16 <body>
    17     <form id="form1" runat="server">
    18     <div>
    19         <iframe src="masterdetail.aspx" width="480" height="41" frameborder="0" style="background-color: #EFEFEF">
    20         </iframe>
    21     </div>
    22     <div>
    23         刷新时间:
    24         <asp:TextBox ID="txtTime" runat="server" Visible="true" Style=" 240px; height: 20px;"></asp:TextBox>
    25         <br />
    26         原始时间:
    27         <asp:TextBox ID="txtOrgTime" runat="server" Visible="true" Style=" 240px; height: 20px;"></asp:TextBox>
    28     </div>
    29     </form>
    30 </body>
    31 </html>
    32 


    masterdetail.aspx的内容如下:

     1 <%@ Page Language="C#" AutoEventWireup="true" %>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head runat="server">
     5     <title>即将刷新父页面的控件值</title>
     6     <script language="javascript" type="text/javascript">
     7         function doReturn(valCurrentTime) {
     8             parent.document.forms[0].elements["txtTime"].value = valCurrentTime;
     9         }
    10     </script>
    11     <script type="text/C#" runat="server">
    12         protected void btn_Refresh_Click(object sender, EventArgs e)
    13         {
    14             string m_script = @"<script language=Javascript>doReturn('{0}');<" + @"/script>";
    15             m_script = string.Format(m_script, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
    16             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "getTime", m_script);
    17         } 
    18     </script>
    19 </head>
    20 <body>
    21     <form id="form1" runat="server">
    22     <div>
    23         <asp:Button ID="btn_Refresh" Text="我在IFrame页面刷新父页面的时间" runat="server" OnClick="btn_Refresh_Click">
    24         </asp:Button>
    25     </div>
    26     </form>
    27 </body>
    28 </html>
    29 


    显示效果:





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

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

    1  function doReturn2(valCurrentTime) {
    2             var ObjectControl = parent.document.getElementById("txtTime");
    3             //alert(ObjectControl);
    4             if (null != ObjectControl) { ObjectControl.value = valCurrentTime; }
    5         }


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

    邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
    助人等于自助!  3w@live.cn
  • 相关阅读:
    Xcode代码块快捷输入
    Git常用命令
    vim
    MACOX中apache配置
    IOS中实现动画的几种方式
    Swift与OC混合编译
    网络图像加载
    我对互联网的理解
    运行时
    自动布局使用
  • 原文地址:https://www.cnblogs.com/downmoon/p/1562275.html
Copyright © 2011-2022 走看看