//打开一个模式窗口,向它传递一个值
string ztdm;
ztdm = "传递的帐套代码";
Response.Write("<script Language=JavaScript>");
Response.Write("var var_name;var return_var");
Response.Write("var_name = '"+ztdm+"';");
Response.Write("return_var = showModalDialog('fhdw_list.aspx',var_name);");
Response.Write("</script>");
//这样打开窗口无问题,参数传递也无问题;
单在模式窗口内怎么给本窗口传值呢?Response.Write("<script Language=JavaScript>");
Response.Write("window.returnValue='aaa';");
Response.Write("parent.document.all['fhdw'].text = 'aaaaa';");
Response.Write("window.close();");一直提示parent.document.all['fhdw']为空;我的目的呢,就是从父类窗口上传一个参数到子窗口,然后子窗口根据这个值检索数据,将检索的的数据给父窗口的一个控件;

解决方案 »

  1.   

    按照你所说的,应该这样写
    调用模式窗口方法:
    string ztdm;
    ztdm = "传递的帐套代码";
    Response.Write("<script Language=JavaScript>");
    Response.Write("var var_name;var return_var");
    Response.Write("var_name = '"+ztdm+"';");
    Response.Write("return_var = showModalDialog('fhdw_list.aspx',var_name);");
    Response.Write("if( return_var!= null ) {");
    Response.Write("document.all['fhdw'].value = return_var;");
    Response.Write("}");
    Response.Write("</script>");模式窗口返回值:
    Response.Write("<script Language=JavaScript>");
    Response.Write("window.returnValue='aaa';");
    Response.Write("window.close();");
    Response.Write("</script>");
      

  2.   

    c#版 打开一个模式窗口,向它传递一个值 -》模式窗口返回值 分3个页面实现
    =========================================================
    // t1.aspx
    <%@ Page language="c#" Codebehind="t1.aspx.cs" AutoEventWireup="false" Inherits="testcry.t1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
      <HEAD>
      <title>WebForm1</title>
    </HEAD>
      <body MS_POSITIONING="GridLayout">
    <TABLE height=139 cellSpacing=0 cellPadding=0 width=613 border=0
    ms_2d_layout="TRUE">
      <TR vAlign=top>
        <TD width=10 height=15></TD>
        <TD width=603></TD></TR>
      <TR vAlign=top>
        <TD height=124></TD>
        <TD>
       <div align="center">
       <form id="Form1" method="post" runat="server">
       <asp:label id="Label1" runat="server" Font-Bold="true">
        从当前页面打开新窗口,并把变量传递到新窗口的例子,可以多次打开提交。
        </asp:label><br>
       <br>
       <asp:textbox id="TextBox1" runat="server" Width="600px">这是初始值,将被传递到新窗口。</asp:textbox><br>
       <br>
       <asp:button id="Button1" runat="server" Text="打开窗口" Width="96px"></asp:button></form>
      </div></TD></TR></TABLE>
      </body>
    </HTML>
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //t1.aspx.cs
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace testcry
    {
    /// <summary>
    /// t1 的摘要说明。
    /// </summary>
    public class t1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.HtmlControls.HtmlForm Form1;
    protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if (!IsClientScriptBlockRegistered("clientScript"))
    {
    string vbCrLf="\n";
    string strScript = "<script>" + vbCrLf;
          strScript += "function OpenWin(){" + vbCrLf;
          strScript += "var str=window.showModalDialog('t2.aspx',document.Form1.TextBox1.value)" + vbCrLf;
          strScript += "if(str!=null)  document.Form1.TextBox1.value=str" + vbCrLf;
          strScript += "}" + vbCrLf;
          strScript += "</script>" + vbCrLf;
      RegisterClientScriptBlock("clientScript", strScript);
      Button1.Attributes.Add("onclick","OpenWin()");
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    } /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //t2.aspx
    <%@ Page language="c#" Codebehind="t2.aspx.cs" AutoEventWireup="false" Inherits="testcry.t2" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
      <HEAD><TITLE>WebForm2</TITLE>
    </HEAD>
      <frameset rows="0,*">
        <frame src="about:blank">
        <frame src="t3.aspx">
      </frameset>
    </HTML>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //t2.aspx.cs
    无需添加代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //t3.aspx   这一页是模式窗口返回值的那一页
    <%@ Page language="c#" Codebehind="t3.aspx.cs" AutoEventWireup="false" Inherits="testcry.t3" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
      <HEAD>
       <title>WebForm3</title>
       <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">
       <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
       <meta name="vs_defaultClientScript" content="JavaScript">
       <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      </HEAD>
      <body  MS_POSITIONING="GridLayout" id="MyBody" runat="server">
      <form id="Form1" method="post" runat="server">
       <asp:Label id="Label1" runat="server">请输入您的大名:</asp:Label><br>
       <br>
       <asp:TextBox id="TextBox1" runat="server" Width="558"></asp:TextBox><br>
       <br>
       <asp:Button id="Button1" runat="server" Text=" 提  交 "></asp:Button>
      </form>
      </body>
    </HTML>
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //t3.aspx.csusing System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace testcry
    {
    /// <summary>
    /// t3 的摘要说明。
    /// </summary>
    public class t3 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.HtmlControls.HtmlControl MyBody; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面 if (IsPostBack)
    {
    string vbCrLf="\n";
    string strScript= "<script>" + vbCrLf;
          strScript += "window.parent.returnValue='" + TextBox1.Text.Replace("'", "\'") + "'" + vbCrLf;
          strScript += "window.parent.close()" + vbCrLf;
          strScript += "</script>" + vbCrLf; if (!IsClientScriptBlockRegistered("clientScript"))
    {
    RegisterClientScriptBlock("clientScript", strScript);
    }
    }
    if (!IsPostBack)
    {
    MyBody.Attributes.Add("onload","document.Form1.TextBox1.value=window.parent.dialogArguments");
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    } /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  3.   

    按wj2929的方法试试,但是,你应该用Page.RegisterStartupScript.在页面所有的控件加载完成以后,再执行这段代码。因为如果有些控件没有加载完,当然提示名为fhdw没有找到或为空。
      

  4.   

    关于模态窗口(showModalDialog)的专题讨论!
    1.模态窗口的打开
    2.模态窗口的关闭
    3.模态窗口的传递参数。
    4.其他。
    1.window.showModalDialog("DialogPage.aspx","newwin","dialogHeight: 200px; dialogWidth: 150px; dialogTop: 458px; dialogLeft: 166px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");2.window.close();3.传值
    ParentPage.aspx:
    window.showModalDialog("DialogPage.aspx?para1=aaa&para2=bbb");DialogPage.aspx:
    string str1=Request.QueryString["para1"].toString();
    string str2=Request.QueryString["para2"].toString();返回值
    DialogPage.aspx:
    window.returnValue="aaa";ParentPage.aspx:
    var str=window.showModalDialog("DialogPage.aspx");4.
    aspx页面在showmodeldialog情况下为什么一提交就重新打开一个页面?
    showmodaldialog打开的页面中在<head></head>之间加入一行:<base target="_self">
      

  5.   

    例子 
    WebForm2.aspx.vb
        Inherits System.Web.UI.Page
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents Button2 As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Button1.Attributes.Add("onclick", "var st=window.showModalDialog('user.aspx?val='+document.all('TextBox1').value);document.all('TextBox1').value=st;return st;")
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            RegisterStartupScript("key", "<script>window.opener=null;window.close(this);</script>")
        End Sub
    user.aspx.vb
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents cancel As System.Web.UI.WebControls.Button
        Protected WithEvents ok As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox    
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim str As String
            If Not IsPostBack Then
                str = Request.QueryString("val")
                TextBox1.Text = str
            End If
        End Sub
        Private Sub cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cancel.Click
            RegisterStartupScript("key", "<script>window.returnValue='null';window.opener=null;window.close(this);</script>")
        End Sub
        Private Sub ok_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ok.Click
            RegisterStartupScript("key", "<script>window.returnValue=document.all('TextBox2').value;window.opener=null;window.close(this);</script>")
        End Sub
      

  6.   

    window.dialogArguments.document.all.ControlId.value=""