注册 登录
编程论坛 ASP.NET技术论坛

子页面中的框架页向父页面传值的问题

scindy 发布于 2010-01-23 13:37, 4125 次点击
有一个default.aspx页面,里有5个textbox和一个button按钮,我点击button时打开框架页stocktree.htm。
stocktree.htm框架页有左右两个页,分别为stocktypes.aspx和stockdetails.aspx页,stockdetails.aspx页面是由gridview绑定的数据,数据第一列是CheckBox,后面的列是绑定的内容,我选中 CheckBox时,点击一个按钮,把值传回 default.aspx 中的5个textbox,现在的问题是我点按钮后没有任何反应???
传值代码为:
this.Page.Controls.Add(new LiteralControl(string.Format(" <script>parent.window.opener.document.form1.tbxstkno.value='{0}',parent.window.opener.document.form1.tbxstkname.value='{1}',parent.window.opener.document.form1.tbxbaseunit.value='{2}',parent.window.opener.document.form1.tbxqty.value='{3}',parent.window.opener.document.form1.tbxprice.value='{4}',parent.window.opener.document.form1.tbxsummoney.value='{5}' </script>", row.Cells[2].Text, row.Cells[3].Text, bu.ToString(), 1, row.Cells[8].Text, row.Cells[8].Text)));请问这是怎么回事啊?

另外,我在default.aspx中直接点击button打开stockdetails.aspx时,同样的代码是可以把值传回default.aspx页的。
传值代码为:
this.Page.Controls.Add(new LiteralControl(string.Format(" <script>opener.document.form1.tbxstkno.value='{0}',opener.document.form1.tbxstkname.value='{1}',opener.document.form1.tbxbaseunit.value='{2}',opener.document.form1.tbxqty.value='{3}',opener.document.form1.tbxprice.value='{4}',opener.document.form1.tbxsummoney.value='{5}' </script>", row.Cells[2].Text, row.Cells[3].Text, bu.ToString(), 1, row.Cells[8].Text, row.Cells[8].Text)));

大家帮帮忙,看一下`~~谢谢```


6 回复
#2
scindy2010-01-23 13:37
另外再说明一下:
我打开框架页的传值代码和直接打开stockdetails.aspx时的传值代码一样时,也不行`~~`



#3
scindy2010-01-24 09:46
论坛里怎么这么冷清啊`~~
#4
yms1232010-01-24 12:39
框架页面传值不应该用opener吧?如果你想在父窗口内传值给弹出窗口,在父窗口写Javascript函数来完成,子窗口调用函数。不要在子窗口直接使用window.opener
#5
scindy2010-01-24 14:32
我是想子页面(弹出窗口)中的框架页传值给父页面`~

#6
yms1232010-01-24 15:35
建议你这样写
parent.htm
<html>
<head>
<title>父页面</title>
<script language="javascript">
//弹出窗口
function Page_Load()
{
 window.open ("opener.htm", "newwindow", "height=100, width=400, toolbar= no, menubar=no, scrollbars=no, resizable=no, location=no, status=no,top=100,left=300")
}
//将文本给弹出窗口
function SnedOpener(Txt)
{
  window.opener.AcceptMessage(Txt);
}
</script>
</head>
<body onload="Page_Load();">
<iframe name="Child" src="Child.htm" width="500" height="500" scrolling="no" frameborder="1"  ></iframe>
</body>
</html>

opener.htm
<html>
<head>
<title>弹出窗口</title>
<script language="javascript">
function AcceptMessage(Txt)
{
   document.form1.OpenTxt.value=Txt;
}
</script>
</head>
<body>
<form name="form1" >
<textarea name="OpenTxt" style="width:200px;height:95px;" >弹出窗口的文本框</textarea>
</form>
</body>
</html>

Child.htm
<html>
<head>
  <title>子页面</title>
<script language="javascript">
//调用父页面的方法传过去
function Send_Click()
{
   parent.SnedOpener(this.ChTxt.value);
}
</script>
</head>
<body>
  <input type="text" name="ChTxt" >向弹出窗口发送信息<br>
   <input type="button" name="Send" value="发送" onClick="Send_Click();" >
</body>
</html>


[ 本帖最后由 yms123 于 2010-1-24 15:38 编辑 ]
#7
scindy2010-01-24 15:46
谢谢你的回复 `~~不过问题已经解决了`~

原因是我的框架页stockdetails.aspx用了AJAX,我把它去掉了,就能传值了。
我单独打开stockdetails.aspx页时也用了AJAX,也能传`~不知道什么原因啊`~

框架还是有一定的局限性啊`~`

结帖给分`~谢谢各位的回复~~~
1