二, 在新的页面上得到一个或多个值后,传回父级页面?
这个问题在我看来,JavaScript是个不二之选,
在父级页面中
<head runat="server">中添加
<script type='text/javascript'>
function openWindow()
{
window.open('Popup.aspx','_blank','height=450,width=470,status=no,toolbar=no,menubar=no,scrollbars=no,location=no');
}
</script>
<form id="form1" runat="server">中添加
<div>
<asp:TextBox ID="TB_subject" runat="server"></asp:TextBox>
<asp:TextBox ID="TB_Infor" runat="server"></asp:TextBox>
<p>
<input type="button" value="传值并返回父窗口" name="button1" onclick="popup()" /></p>
</div>
当然也可以写在code里,写法如下
Dim PopUpDialog As String
PopUpDialog = "<script type='text/javascript'>window.open('Popup.aspx','_blank','height=450,width=470,status=no,toolbar=no,menubar=no,scrollbars=no,location=no');</script>"
ScriptManager.RegisterStartupScript(Me, Me.GetType, "key", PopUpDialog, False)
PopUp页面当中
<head runat="server">中添加
<script type="text/javascript">
function popup()
{
window.opener.document.getElementById("TB_subject").value=document.getElementById("TB_Name").value;
window.opener.document.getElementById("TB_Info").value=document.getElementById("TB_Summary").value;
window.close()
}
</script>
<form id="form1" runat="server">中添加
<div>
<asp:TextBox ID="TB_Name" runat="server"></asp:TextBox>
<asp:TextBox ID="TB_Summary" runat="server"></asp:TextBox>
<p>
<input type="button" value="传值并返回父窗口" name="button1" onclick="popup()" /></p>
</div>
之后在触发对象(input,button etc…)上添加onclick="popup()" 事件即可, 当然在ASP.NET中如果应用了VB或C#Code这句话应当改为OnClientClick="popup()".
好了解释一下前面卖的关子,这里需要注意几个问题,
1. window.opener.document.getElementById("TB_Name").value这句话虽然可以用window.opener.document.all["TB_Name"].value代替,但是它只对IE有效,在firefox中或其他浏览器是没有结果的,因为事实上document没有all这个方法getElementById或getElementByName才是正解.
2. 如果使用了ASP.NET 2.0 AJAX, 并且把xhtml tag对象写入Code的时候,记得用ScriptManager.RegisterStartupScript(Me, Me.GetType, "key", PopUpDialog, False) 替代Response.Write(script); 因为在ScriptManager控件里不支持Response.Write()