zoukankan      html  css  js  c++  java
  • asp.net 父窗体获取子窗体的返回值,可用来对父窗体局部更新

    今天在项目上遇到了这个问题,其实只是window.returnValue的简单应用,不是asp.net的专属内容。作为积累,记录一个简单的实现模型。

    图1  用到的文件

       从图1中我们可以看到,只用到了两个页面,其中Default.aspx作为父页面,Default2.aspx作为子页面被弹出。Default.aspx页面上有两个TextBox一个Button,代码如下:

    1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    2
    3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4
    5 <html xmlns="http://www.w3.org/1999/xhtml">
    6 <head runat="server">
    7 <title></title>
    8
    9 </head>
    10 <body>
    11 <form id="form1" runat="server">
    12 <div>
    13 <asp:TextBox runat="server" ID="a1">
    14 </asp:TextBox>
    15 <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
    16 <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    17
    18
    19 </div>
    20
    21 </form>
    22 </body>
    23 </html>
    24

    在Button1的Click事件中,我们注册弹窗脚本,代码如下:

    1 protected void Button1_Click(object sender, EventArgs e)
    2 {
    3 StringBuilder s = new StringBuilder();
    4 s.Append("<script language=javascript>");
    5 s.Append("var a=window.showModalDialog('Default2.aspx');");
    6 s.Append("if(a!=null)");
    7 s.Append("document.all('TextBox1').value=a;");
    8 s.Append("</script>");
    9 Type cstype = this.GetType();
    10 ClientScriptManager cs = Page.ClientScript;
    11 string sname = "lt";
    12 if (!cs.IsStartupScriptRegistered(cstype, sname))
    13 cs.RegisterStartupScript(cstype, sname, s.ToString());
    14 }

    其中  s.Append("var a=window.showModalDialog('Default2.aspx');");一句用来弹窗Default2.aspx页面并接收它的返回值。

    接收了返回值之后我们把它赋值给TextBox1.

     Default2.aspx页面有一个TextBox和一个Button,代码如下:

     (这里需要注意的是在head里的<base target="_self" />标记十分重要。

    1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
    2
    3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4
    5 <html xmlns="http://www.w3.org/1999/xhtml">
    6 <head >
    7 <title></title>
    8 <base target="_self" />
    9 </head>
    10
    11 <body>
    12 <form id="form1" runat="server">
    13 <div>
    14 <asp:textbox runat="server" ID="t1"></asp:textbox>
    15 <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    16
    17 </div>
    18 </form>
    19 </body>
    20 </html>
    21

    我们在Default2.aspx页面的Button_Click事件中使用脚本返回一个值给父页面。代码如下:

    1 protected void Button1_Click(object sender, EventArgs e)
    2 {
    3 StringBuilder s = new StringBuilder();
    4 s.Append("<script language=javascript>" + "\n");
    5 s.Append("window.returnValue='" + this.GetSelectValue() + "';" + "\n");
    6 s.Append("window.close();" + "\n");
    7 s.Append("</script>");
    8 Type cstype = this.GetType();
    9 ClientScriptManager cs = Page.ClientScript;
    10 string csname = "ltype";
    11 if (!cs.IsStartupScriptRegistered(cstype, csname))
    12 cs.RegisterStartupScript(cstype, csname, s.ToString());
    13
    14 }

    脚本注册成功之后,我们可以做如下的实验:

    1)打开Default1.aspx页面在id为a1的TextBox中输入数字55,然后点击Button

    2)在弹窗中输入数字66再点子窗体的按钮关闭子窗体。

    3)查看结果

    从结果中,我们可以看出我们保留了先输入到父窗体中的值,又接收了从子窗体传递过来的值。


    作者:玄魂
    出处:http://www.cnblogs.com/xuanhun/
    原文链接:http://www.cnblogs.com/xuanhun/ 更多内容,请访问我的个人站点 对编程,安全感兴趣的,加qq群:hacking-1群:303242737,hacking-2群:147098303,nw.js,electron交流群 313717550。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    关注我:关注玄魂的微信公众号

  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/xuanhun/p/1681089.html
Copyright © 2011-2022 走看看