从弹出窗口向父窗体的 TextBox 传递值






4.86/5 (5投票s)
从弹出窗口将值传回父页面是一个经常被问到的问题。尤其是在弹出窗口中有 GridView 类型控件时。
从弹出窗口将值传回父页面是一个经常被问到的问题。尤其是在弹出窗口中有 GridView 类型控件时。在下面的示例中,我们将使用两个窗体。父窗体是 parent.aspx,弹出窗口是 popup.aspx。另外请注意,parent.aspx 窗体继承自某个 MasterPage。代码同时提供了 VB.Net 和 C#.Net 版本。
--- 父窗体的 .aspx 代码 ---
<script type="text/javascript">
function OpenPopup() {
window.open("popup.aspx","List","scrollbars=no,resizable=no,width=400,height=280");
return false;
}
</script>
.
.
.
<asp:TextBox ID="txtPopupValue" runat="server" Width="327px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Show List" />
--- 如果语言是 vb.net,则为 parent.aspx 的 .vb 代码 ---
If Not IsPostBack Then
Me.Button1.Attributes.Add("onclick", "javascript:return OpenPopup()")
End If
--- 如果语言是 C#.net,则为 parent.aspx 的 .cs 代码 ---
if (!IsPostBack) {
this.Button1.Attributes.Add("onclick", "javascript:return OpenPopup()");
}
--- 弹出窗口的 .aspx 代码 ---
<script language="javascript">
function GetRowValue(val)
{
// 为了简化代码而硬编码的值。
// ControlID 可以作为查询字符串传递给弹出窗口
window.opener.document.getElementById("ctl00_ContentPlaceHolder1_TextBox2").value = val;
window.close();
}
</script>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<AlternatingItemTemplate>
<asp:Button ID="btnSelect" runat="server" Text="Select" />
</AlternatingItemTemplate>
<ItemTemplate>
<asp:Button ID="btnSelect" runat="server" Text="Select" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
--- 如果语言是 vb.net,则为 .vb 文件 ---
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
'假设所需值列在 gridview 中的第二列
DirectCast(e.Row.FindControl("btnSelect"), Button).Attributes.Add("onclick", "javascript:GetRowValue('" & e.Row.Cells(1).Text & "')")
End If
End Sub
--- 如果语言是 C#.net,则为 .cs 文件 ---
protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) {
if ((e.Row.RowType == DataControlRowType.DataRow)) {
//假设所需值列在 gridview 中的第二列
((Button)e.Row.FindControl("btnSelect")).Attributes.Add("onclick", "javascript:GetRowValue('" + e.Row.Cells[1].Text + "')");
}
}
我希望上面的代码清晰易懂。
祝你编码愉快!!!