您的位置:程序门 -> .net技术 -> asp.net



父子窗口函数调用问题!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


父子窗口函数调用问题![已结贴,结贴人:kongxingzhu]
发表于:2007-08-14 19:44:31 楼主
首先有两个网页,起始页名为index.aspx(父窗口),通过单击父窗口的按钮,以模式对话框的形式打开一个子窗口(b.aspx),现在在b.aspx将要关闭时想调用index.aspx中用javascript写好的一个函数,现在要如何实现?
现贴出我的部份代码请大家帮忙想想办法:
        index.aspx中调用子窗口的函数如下:
              string   result   =   " ";
                result   +=   " <script> ";
                result   +=   "if(window.showmodaldialog){var   result=window.showmodaldialog( ' "   +   "b.aspx "   +   " ',window);} ";
                result   +=   "else{var   result=window.open( ' "   +   "b.aspx "   +   " ',\ "mcepopup\ ", 'modal=yes,dialog=yes,width=400,height=450 '); ";
                result   +=   "result.focus();} ";
                result   +=   " </script> ";
              response.write(result);
        在b.aspx(子窗口)中关闭对话框之前我要调用在index.aspx的 <head> 部份的一个javascript函数如名为a(row);我的代码如下,可是没有成功请大家帮帮忙!
            response.write( " <script> ");
                response.write( "if(window.showmodaldialog){var   k=window.dialogarguments;alert(k);k.eval(\ "a()\ ");alert(2);window.close();} ");
            response.write( "else{window.opener.a(123);window.close();} ");
               
                response.write( " </script> ");
        其中有个前提中父窗口调用子窗口别人的代码写好了,我不能改只能在子窗口这边动手脚!
发表于:2007-08-14 19:47:141楼 得分:0
顶!
发表于:2007-08-14 19:53:022楼 得分:0
up
发表于:2007-08-14 20:00:163楼 得分:0
234
发表于:2007-08-14 20:01:024楼 得分:25
showmodaldialog   可以传递参数的       根据返回值     在index.aspx写js实现你需要的操作
参照下面

完整的请看我的blog   http://blog.csdn.net/junval/archive/2007/03/13/1527768.aspx
关闭时候刷新父窗体

方法一:

在主页里写上: <iframe       name=meizz       width=0       height=0> </iframe>      
    模态框里写上: <form       target= "meizz ">           将模态框提交给主页里那个隐藏的框架里      
       
    后台接收页里写上这么一句代码:       <body       onload= "if(window!=top)parnet.location.reload() ">

  方法二:

在对子窗体操作后,如何刷新父窗体,因为此时父窗体的数据可能有变化

    网上有很多人介绍用response.write( " <script   language:javascript>   javascript:window.opener.location.reload(); </script> ");但是试了很多版本,发现其实opener是识别不了的,在子页面里无法刷新父窗体       只有返回后让父窗体自己刷新,即this.page.registerstartupscript( "a ", " <script       language=javascript> window.showmodaldialog( 'webform2.aspx?b= "+a+ " ', ' "+a+ " ', 'dialogwidth=380px;dialogheight=450px;status=yes;scroll=no;resizable=no; ');window.location=window.location; </script> ");就是写在父窗体的执行脚本语句里,可以看到比刚才只是多了个window.location=window.location,就是自己在重新加载一遍.4其他:showmodaldialog:模态窗口,始终获得焦点           被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。         要在父窗口里开一个showmodaldialog,可以通过父窗口一个按钮的click事件   如:this.page.registerstartupscript( "dffd ", " <script       language=javascript> window.showmodaldialog( 'webform3.aspxb ', '变量 ', 'dialogwidth=380px;dialogheight=450px;status=yes;scroll=no;resizable=no; ' </script> ");可以看到showmodaldialog又三个参数,第一个为要开的子窗体,第二个为传递的变量,最后的为窗体的大小等些设置.如何传父窗体的值给子窗体,可以通过session,这样很方便,但是耗资源,可以通过url传string   a= "test ";     showmodaldialog( 'webform3.aspx?b= "+a+ " ', ' "+a+ " ', ' "窗口的设置 " ')把2中的showmodaldialog函数改为如上即可,这样在父窗体中的变量a就传递到了子窗体的b然后在子的.aspx中的page_load中取b的值即可,即:     b=request.querystring[ "b "];   这样b就可以在子窗体中用了
 

发表于:2007-08-14 20:07:055楼 得分:0
你说的好像不是我想要的!不过还是要谢谢你
发表于:2007-08-14 20:14:066楼 得分:0
我曾试过k.eval(\ "a()\ ");程序执行到这时页面就死在那不动了。如果改为k.a()程序提示找不到这个对象的属性,晕!我真的在index.aspx页面的head部份加了a的javascript的函数~
发表于:2007-08-14 20:18:147楼 得分:0
111
发表于:2007-08-14 20:19:518楼 得分:0
方法也是对象   可以传递要子窗口       你还是没明白showmodaldialog的工作方式
好好看看吧
发表于:2007-08-14 20:19:559楼 得分:25
//   index.aspx
var   retval   =   window.showmodaldialog( "b.aspx ",   window);   //   将本窗口   window   对象传递给子窗口


//   b.aspx

//   ...
var   parentwin   =   window.dialogarguments;   //   获取父窗口   window   对象
parentwin.somedefinedinparentwindow();     //   调用父窗口   函数
发表于:2007-08-14 20:26:0010楼 得分:0
to:jinglecat(晓风残月   > >   问题需简洁,错误要详细)  
你写的不就是我刚才补充的吗,我试过了还是不可以用!
发表于:2007-08-14 20:34:2611楼 得分:0
to:junval(饭桶)  
  你所说的方法也是对象,那我要如何向子窗口传递了,我没学什么javascript因为项目中用的也很少所以用到那就只好学到那了!所以请你明示!
发表于:2007-08-14 20:43:1212楼 得分:0
12


快速检索

最新资讯
热门点击