现在有A和B页面,B是模式界面!
有一控件C,C是加载在A中的,我把弹出模式窗体的代码(OpenForm)写在A页面中的,在C控件中调用A页面的函数OpenForm,可以打开B页面,但是我如何在接收返回值,我想在C控件中知道返回的结果值,谢谢!我调试过,在A页面的OpenForm函数中是可以接收到返回值的,不过我不知道控件如何才能获得值!我这样做的目的就是A是一个主界面(弹出模式窗体的代码OpenForm函数写在A页面里面),以后所有业务数据都做成控件在A中加载,弹出页面时调用A主页面的OpenForm方法,但我现在要把返回值传到控件中,我不知道如何处理,请大家帮忙,谢谢!

解决方案 »

  1.   

    页面a打开modaldialog,在fun*中设定返回处理程序,并将值通过objArg传递给页面b
    页面b在被打开的modaldialog中加载,然后通过修改window.dialogArgments将值返回给页面a
    关键:window.dialogArgments对象是objArg对象的引用(当然也可以通过window.returnValue返回值)// a.aspx
    ......
    <HTML>
    <HEAD>
    <title>a</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <script language="javascript"">
    <!--
    var DialogFeatures ="center:yes;dialogHide:yes;edge:raised;help:no;resizable:no;scroll:yes;status:no;";
    var objArg;
    // create html dialog
    function fnShowDialog(url, oWindow, fun)
    {
    objArg = new Object();
    objArg.window = oWindow;
    objArg.reload = true;
    if( showModalDialog(url, objArg, DialogFeatures) == true)
    {
    eval(fun);
    return true;
    }
    else
    return false;
    } /* 对于不同的相应,fun是可以有所不同的 */
    function fun1()
    {
    window.document.getElementById("Text1").value = objArg.rv;
    } function fun2()
    {
    window.document.forms[0].submit();
    }
    //-->
    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <INPUT id="Text1" type="text" name="Text1"> <INPUT id="Button1" onclick="fnShowDialog('b.aspx',window ,'fun1()');" type="button"
    value="Button1" style="Z-INDEX: 101"> <INPUT id="Button2" onclick="fnShowDialog('b.aspx',window ,'fun2()');" type="button"
    value="Button2" style="Z-INDEX: 102">
    </form>
    </body>
    </HTML>// b.aspx
    ......
    <HTML>
    <HEAD>
    <title>b</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <base target="_self">
    <script language="javascript"">
    <!--

    function fun()
    {
    window.returnValue=true;
    window.dialogArguments.rv = "aa";
    window.close();
    }
    //-->
    </script> </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <INPUT type="button" value="Button" onclick="fun();" ID="Button1" NAME="Button1">
    </form>
    </body>
    </HTML>
      

  2.   

    jpphy(杰飞) 兄,谢谢你的回答!
    你给我的代码应该也是两个页面之间参数的传递吧(也许我没看明白)?我想要把返回的值传递到A页的C控件中,请问我该如何做?我现在这边程序设计的方式是,我有一个body.aspx页面,通过这个页面我可以加载所有的业务数据(我把业务数据操作的界面都做成了控件),我可以要加载业务数据之前做很多操作,这些操作我只需在body.aspx中做就好了(比如说我做用户身份验证等操作),当然如果有好的方法也可以告诉我!谢谢了!
      

  3.   

    A中做一個函數Func
    Func(showModalDialog(.......))
    在此函數中再處理
    document.all.c.value = window.returnValue;
      

  4.   

    document.all.c.value = window.returnValue;document.all.c.value中的C是什么?
      

  5.   

    1、objArg是在a页中初始化的,然后传递给b页。2、在b页中修改objArg,以便将值返回到a页面。
    但修改objArg是通过修改window.dialogArguments来实现的,因为objArg和window.dialogArguments是同一个对象。
    例如:window.dialogArguments.rv = "aa";3、对话框关闭后,回到a页时,可以读取objArg的数据,对a页的控件操作,修改相应的值。
    例如:
    function fun1()
    {
    window.document.getElementById("Text1").value = objArg.rv;
    }
      

  6.   

    该函数能读懂吗?
    function fnShowDialog(url, oWindow, fun)
    {
         objArg = new Object();     if( showModalDialog(url, objArg, DialogFeatures) == true)
         { 
            val(fun);
            return true;
         }
         else
           return false;
    }
      

  7.   

    val(fun)  改为  eval(fun)
      

  8.   

    在函数
    fun()
    {
    ……
    }
    中添加处理,从objArg中获取返回值,传回到相应的控件
      

  9.   

    例如:
    function fun1()
    {
    window.document.getElementById("Text1").value = objArg.rv;
    }
      

  10.   

    function fun1()
    {
    window.document.getElementById("Text1").value = objArg.rv;
    }我试了,不行!
      

  11.   

    jpphy(杰飞) 你那边可以调试通过吗?我就奇怪了!