窗口间传递参数学习二

窗口间传递参数学习二(子对话框向父窗口传值)

一.新建父页面Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!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>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>

        <asp:RequiredFieldValidator ID="rfv1" runat="server" ErrorMessage="*"

            ControlToValidate="txtName" ValidationGroup="v" />

        年龄:<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>

        <asp:RequiredFieldValidator ID="rfv2" runat="server" ErrorMessage="*"

            ControlToValidate="txtAge" ValidationGroup="v" />

        <asp:Button ID="Button1" runat="server" Text="进入赋值页面"/><br />

        <asp:Button ID="Button2" runat="server" Text="确定"  ValidationGroup="v"/>

    </div>

    </form>

    </body>

</html>

后台代码

public partial class _Default : System.Web.UI.Page

{

 

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

        {

            this.Button1.Attributes.Add("onclick", string.Format(@"javascript:showModalDialog('Child.aspx?formid={0}&&txtName={1}&&txtAge={2}', window,

                'dialogWidth:300px; dialogHeight:200px; help:0;center:1;') ;return false;",this.Form.ClientID,this.txtName.ClientID,this.txtAge.ClientID));

            //使用"return false"是为了让Button1不回传,如果要回传则不需加

           //window对象传入子窗口的dialogArguments

        }

    }

}

二.新建子页面Child.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Child.aspx.cs" Inherits="Child" %>

 

<!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>

    <base target="_self" /><%--不然会打开一个新的IE窗口,然后再关掉的,必写--%>

</head>

 

<body>

    <form id="form1" runat="server">

    <div>

        填写姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />

        填写年龄:<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>

        <asp:Button ID="btnOk" runat="server" Text="确定" onclick="btnOk_Click" />

    </div>

    </form>

</body>

</html>

后台代码

public partial class Child : System.Web.UI.Page

{

 

    protected void btnOk_Click(object sender, EventArgs e)

    {

        string formId = Request.QueryString["formid"];

        string []controls = {Request.QueryString["txtName"],Request.QueryString["txtAge"]};

        string []values = {this.txtName.Text,this.txtAge.Text};

        JavascriptHelper.DialogArguments(this.Page, formId, controls, values, false);

    }

}

二.App_Code中的类JavascriptHelper.cs

using System;

using System.Web.UI;

using System.Text;

 

public class JavascriptHelper

{

    /// <summary>

    /// 关闭当前*对话框*并向父窗口的控件赋值

    /// </summary>

    /// <param name="P">调用的页面</param>

    /// <param name="formname">父窗口客户端的form名称(如:form name="aspnetForm"</param>

    /// <param name="controls">父窗口客户端的控件ID数组(如:txtName,txtAge</param>

    /// <param name="values">对应每个控件传达的值的数组</param>

    /// <param name="isReload">是否需要刷新父页面</param>

    public static void DialogArguments(Page P, string formname, string[] controls, string[] values, bool isReload)

    {

        if (controls.Length != values.Length)

            throw new ArgumentException("controls的长度和values长度必须相等");

 

        StringBuilder js = new StringBuilder();

        js.Append("<script language='javascript' type='text/javascript'>");

 

        //dialogArguments属性仅对showModalDialog showModelessDialog 打开的*对话框*可用

        for (int i = 0; i < controls.Length; i++)

        {

            if (string.IsNullOrEmpty(formname))//window对象是当前窗口对象

                js.AppendFormat("window.dialogArguments.{0}.value='{1}';", controls[i], values[i]);

            else

                js.AppendFormat("window.dialogArguments.{0}.{1}.value='{2}';", formname, controls[i], values[i]);

        }

        js.Append("window.close();");

        if (isReload)

            js.Append("window.dialogArguments.location.reload();");

        js.Append("</script>");

        P.ClientScript.RegisterStartupScript(P.GetType(), "onclick", js.ToString());

    }

}

 

三.项目结构图(使用的是VS2008)

四.运行效果图

点击子页面确定按钮后:

 

五.备注

       IE下正常运行,但在火狐下有问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值