如何将父页面的TextBox的Text传到子页面(弹出页面)?
最近在做一个项目时,要求从父页面把Textbox的值传到弹出页面,子页面的触发事件由父页面的button控件触发,刚开始做的时候我是用Window.open("webform.aspx?id="+Textbox1.ClientID+"&value="+Textbox1.Text",,)后边的参数我省去了,如果传递的参数的字符串不多的话,那么结果是正确的,但是当Textbox的值很多的时候,当传值时,它运行到这一句话的时候,就会报错,说无效的指针,那位大虾能给小弟一点建议! 问题点数:10、回复次数:31Top
1 楼zhang_frank(。。。。。。。。。。)回复于 2006-03-26 16:43:20 得分 0
你改成post试试看Top
2 楼lhzyn(无心睡眠)回复于 2006-03-26 16:49:14 得分 1
用URL传值由长度限制
window.open打开的窗口可以用window.opener得到父窗口的对象
你可以在自窗口的onload中些段JS得到你要传的值Top
3 楼bwtgod()回复于 2006-03-26 16:53:35 得分 0
可以考虑session
在子页面request就好了Top
4 楼pbwf(书生)回复于 2006-03-26 16:57:04 得分 0
顶一下.Top
5 楼xjh103(Beyond)回复于 2006-03-26 18:26:15 得分 0
zhang_frank你提到的post方法怎么用?谢谢!Top
6 楼xjh103(Beyond)回复于 2006-03-26 18:30:06 得分 0
lhzyn(无心睡眠)你说的这个方法,我用过,方法是可行的,但是,我在后台的代码中要用到Textbox的值,而页面运行的顺序是先是后台代码,然后才是前台的JS,所以这样做只能在JS中得到值,而在CS文件中却无法得到这些值.Top
7 楼stormlly()回复于 2006-03-26 19:24:32 得分 0
用session应该是可以搞定的Top
8 楼wolaile27(7号飓风)回复于 2006-03-26 21:33:40 得分 0
用session来传递你需要的值,应该可以搞定你的问题Top
9 楼xjh103(Beyond)回复于 2006-03-27 08:21:00 得分 0
Session我考虑过了,因为父页面是不刷新的,所以,Session还是不能把变化的值传递过来。Top
10 楼lengfeng8866(公孙恋雪(专心学习WEB开发))回复于 2006-03-27 08:55:12 得分 1
当父窗口中的textbox的值发生更改时,在你的父窗口中使用xmlhttp把这个值post给子窗口,应该可以吧。你可以试试。
关于xmlhttp的使用,请参照 http://www.xmlhttp.cn/manual/xmlhttprequest.htmlTop
11 楼pbwf(书生)回复于 2006-03-27 09:03:15 得分 0
继续关注Top
12 楼xjh103(Beyond)回复于 2006-03-27 10:13:30 得分 0
lengfeng8866(公孙恋雪(专心学习WEB开发))这位大虾的建议很好,但是我是刚来实习不久,没有学过Xml,你能够给出更详细的解决方案么?十分感谢!Top
13 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 16:29:22 得分 6
父窗口 father.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
<!--
function openChild(){
var k = window.showModalDialog("child.htm",window,"dialogWidth:335px;status:no;dialogHeight:300px;");
if(k != null)
document.getElementById("txt11").value = k;
}
function Button1_onclick() {
window.open("../login.aspx","mainFrame");
}
//-->
</script>
</HEAD>
<BODY>
<br>
传递到父窗口的值:<input id="txt9" type="text" value="3333333333333"><br>
返回的值:<input id="txt11" type="text"><br>
子窗口设置的值:<input id="txt10" type="text"><br>
<input type="button" value="openChild" onclick="openChild()"> <INPUT id="Button1" type="button" value="setMain" name="Button1" onclick="return Button1_onclick()">
<a href="../login.aspx" target="mainFrame"><img src="../img/C.gif" border="0"></a>
</BODY> <script language="javascript">openChild();</script>
</HTML>
子窗口 child.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
</HEAD>
<BODY>
<br>父窗口传递来的值:<input id="txt0" type="text"><br>
输入要设置父窗口的值:<input id="txt1" type="text"><input type ="button" value="设置父窗口的值" onclick="setFather()"><br>
输入返回的值:<input id="txt2" type="text"><input type ="button" value="关闭切返回值" onclick="retrunValue()">
<input type ="button" value="关闭刷新父窗口" onclick="">
<input type ="button" value="父窗口的目的窗口打开" onclick="opiframe();" ID="Button1" NAME="Button1">
</BODY>
</HTML>
<script language=javascript>
<!--
var k=window.dialogArguments;
//获得父窗口传递来的值
if(k!=null)
{
document.getElementById("txt0").value = k.document.getElementById("txt9").value;
}
//设置父窗口的值
function setFather()
{
k.document.getElementById("txt10").value = document.getElementById("txt1").value
}
//
function opiframe()
{
//k.Button1_onclick();
alert(k);
k.document.getElementById("Button1").click();
}
//设置返回到父窗口的值
function retrunValue()
{
var s = document.getElementById("txt2").value;
window.returnValue=s;
window.close();
}
//-->
</script>
Top
14 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 16:48:00 得分 0
上面主要是字窗口传到父窗口,如果是父窗口传到字窗口,还不简单?
<script language="javascript" type="text/javascript">
window.showModalDialog("child.htm?value="+document.all.TextBox1.vale,window,"dialogWidth:335px;status:no;dialogHeight:300px;");
</script>
在字窗口接收: string jieshou=Request.Params[0];(后台代码)
也可写在前台:<asp:textbox id="tb_cId" runat="server" Width="155px" Text="<%=Request.Params[0]%>"></asp:textbox>
Top
15 楼SimpleDay(今天你穿内裤了吗?)回复于 2006-03-27 17:06:19 得分 0
dim string1 as string=opnner.document.getElementById("txt11").valueTop
16 楼AIRFLYNET(汪洋中的一条船)回复于 2006-03-27 17:11:21 得分 0
window.opnner.document.getElementById("txt11").value;
Top
17 楼xjh103(Beyond)回复于 2006-03-27 17:34:21 得分 0
谢谢大家的支持!
可能是我没把需求说明白,我做的这个项目是这样的, 【label】【Textbox】【hyplink】
父页面大概是这样子设计的,点击hyplink,链接到子页面,在子页面有两个Listbox,一个用来显示数据库中的所有数据,另一个用来显示用户所选择的数据,如果父页面的Textbox不为空,一方面这个值要传到子页面,并且在Listbox中显示,另一方面我在子页面的Page_Load的时候要根据Textbox的值是否为空,来对数据库捞取数据。Top
18 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 17:41:43 得分 0
你用的是什么语言?C#还是VB?Top
19 楼xjh103(Beyond)回复于 2006-03-27 17:41:56 得分 0
我刚开始是这么做的,在父页面:hyplink.NavigateUrl="javascript:ShowStaff(\""+ strDistributeType +"\",\"Department\");void(0);";
function ShowStaff(dstribtype,typeid)
{
var CtrlTxtDept = document.getElementById(""txtDept"");
if (dstribtype == ""--Please Select--"")
{
return;
}
window.open("/ManpowerSelect.aspx?DistributeType="+dstribtype+"&StrCondition=" + typeid+ "&StrTxtDept=""+CtrlTxtDept.value,"Select" , "width=450,height=330,scrollbars=no,toolbar=no,menubar=no,resizable=yes,location=no,status=no");
}
在子页面 string strDistributeType = Request["DistributeType"].Trim();
string strConditions = Request["StrCondition"].Trim();
string strDept = Request["StrTxtDept"].Trim();
switch(strConditions)
{case "Department":
LoadDepartment(strDept);
break;Top
20 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 17:42:32 得分 0
其实你完全可以通过接收的参数值来判断啊!Top
21 楼xjh103(Beyond)回复于 2006-03-27 17:46:45 得分 0
刚才没写完,发了出去。
我这样子做对传递一些字符串比较少的时候,是没有问题的,但是当传递的字符串很多,比如超过10000个,当程序运行到window.open时就会报错,说无效的指针。Top
22 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 17:47:33 得分 0
网页之间传递参数最常用的是aa.htm?parm1=aa&parm2=bb&parm3=cc这种方法,后面可以给多个参数,其中parm1,parm2,parm3是参数名,可以自己定义,等号后面的aa,bb,cc是你所要传递的值,这些值你可以在接收的页面接收 用Request方法即可,Request.Params[0]是接收第一个参数,Request.Params[1]接收的是第二个参数,依次类推(C#语言)。Top
23 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 17:55:42 得分 0
哇你这样传递参数估计不能太多哦,具体又没有限制或者多少限制我不太清楚,太多的话估计就会有错,如果你要传10000个也太多了吧!!如果你要传很多的话,可以用其他方法,可以将要传递的参数放在数组里面,然后赋值给Session,用window.showModalDialog或者window.showModelessDialog方法打开字窗口是可以接受Session的。Top
24 楼xjh103(Beyond)回复于 2006-03-27 17:59:37 得分 0
可是问题就在这了,关闭子页面后,父页面不刷新(要求),这样的话Session好像还是第一次Page_Load的数据。Top
25 楼thirstlearn(程序也是一种生产力)回复于 2006-03-27 18:14:26 得分 0
我给你的第一个例子里面有子窗口和父窗口交互,完全可以实现自窗口关闭时刷新父窗口
关闭刷新父窗口的例子
farther.html
---------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
<!--
function openChild()
{
var k = window.showModalDialog("child.html",window,"dialogWidth:335px;status:no;dialogHeight:300px");
if(k == 1)//判断是否刷新
{
alert('刷新');
window.location.reload();
}
}
//-->
</script>
</HEAD>
<BODY>
<br>传递到父窗口的值:<input id="txt9" type="text" value="3333333333333"><br>
<input type ="button" value="openChild" onclick="openChild()">
</BODY>
</HTML>
----------------------------------------------------
child.html
--------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
</HEAD>
<BODY>
<br>父窗口传递来的值:<input id="txt0" type="text"><br>
<input type ="button" value="关闭刷新父窗口" onclick="winClose(1)">
<input type ="button" value="关闭不刷新父窗口" onclick="winClose(0)">
</BODY>
</HTML>
<script language=javascript>
<!--
var k=window.dialogArguments;
//获得父窗口传递来的值
if(k!=null)
{
document.getElementById("txt0").value = k.document.getElementById("txt9").value;
}
//关闭窗口返回是否刷新的参数.
function winClose(isRefrash)
{
window.returnValue=isRefrash;
window.close();
}
//-->
</script>
--------------------------
Top
26 楼xjh103(Beyond)回复于 2006-03-27 18:34:04 得分 0
感谢thirstlearn(程序也是一种生产力)不倦的解答,按照你这样子做肯定能在子页面得到值,可是我还有一个要求还没实现,就是在子页面的Page_Load的时候要根据Textbox的值是否为空,来对数据库捞取数据。 如果在Page_Load里直接用string strDept=txt0.value的话,那么txt0.value的值并不是父页面传过来的值。这也是我感到困惑的地方!
再次感谢thirstlearn!Top
27 楼thirstlearn(程序也是一种生产力)回复于 2006-03-28 08:26:25 得分 0
其实你完全可以通过接收的参数值来判断啊!Top
28 楼anthit()回复于 2006-03-28 08:38:42 得分 0
在父页面连接时传递变量 在子页面request它就可以Top
29 楼sth79(阿海子)回复于 2006-03-28 10:03:31 得分 0
服务器端、客户端控件互相传递数据怎么弄?
Top
30 楼flysky2006(大师)回复于 2006-03-28 11:35:55 得分 2
按照你这样子做肯定能在子页面得到值,可是我还有一个要求还没实现,就是在子页面的Page_Load的时候要根据Textbox的值是否为空,来对数据库捞取数据。 如果在Page_Load里直接用string strDept=txt0.value的话,那么txt0.value的值并不是父页面传过来的值。
可在textbox值改变后,调用window.location.reload();
Top
31 楼xjh103(Beyond)回复于 2006-03-28 17:07:25 得分 0
flysky2006(大师)的方法我刚才试了一下,它显示的值还是为空,而且在重新Load的时候,从父页面Window.open("webform.aspx?id="+Textbox1.ClientID+"&value="+Textbox1.Text",,)传过来的id和value都没有了,就是不能在子页面用Request["id"]了。Top




