在ASP.NET中,弹出窗口并获取返回值的实现通常涉及前端JavaScript和后端代码的协同工作,以下是详细的步骤和示例代码:
1、HTML部分:包含用于显示返回值的文本框和一个按钮,按钮点击时触发弹出窗口操作。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>主页面</title> <script type="text/javascript"> function Pop() { var result = showModalDialog('downs.aspx', 'subpage', 'dialogWidth:400px;dialogHeight:300px;center:yes;help:no;resizable:no;status:no'); //打开模态子窗体,并获取返回值 if (result != null) { document.getElementById("txt_id").value = result.split("|&|")[0]; //返回值分别赋值给相关文本框 document.getElementById("txt_name").value = result.split("|&|")[1]; document.getElementById("txt_pwd").value = result.split("|&|")[2]; } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txt_id" runat="server"></asp:TextBox> <asp:TextBox ID="txt_name" runat="server"></asp:TextBox> <asp:TextBox ID="txt_pwd" runat="server"></asp:TextBox> <br /> <asp:Button ID="btnPop" runat="server" Text="弹出窗口" OnClientClick="Pop()" /> </div> </form> </body> </html>
2、说明:在上述代码中,showModalDialog
函数用于打开弹出窗口downs.aspx
,并在其关闭后获取返回值,返回值通过特定的分隔符(如“|&|”)进行分割,然后分别赋值给三个文本框。
1、HTML部分:包含一个GridView控件用于展示数据,以及一个隐藏的按钮用于触发返回值设置。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>弹出窗口页面</title> <script type="text/javascript"> function SetReturnValue(infor_id, infor_name, infor_psw) { window.returnValue = infor_id + "|&|" + infor_name + "|&|" + infor_psw; //设置返回值 window.close(); //关闭窗口 } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvshow" runat="server" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" OnRowDataBound="gvshow_RowDataBound"> <FooterStyle BackColor="White" ForeColor="#000066" /> <RowStyle ForeColor="#000066" /> <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> </asp:GridView> </div> <asp:Button ID="btnSetReturn" runat="server" Text="设置返回值" OnClientClick="SetReturnValue('123', '测试名称', '测试密码')" Style="display:none;" /> </form> </body> </html>
2、说明:在GridView的行数据绑定事件(gvshow_RowDataBound
)中,为每一行添加点击事件,当用户点击某一行时,触发SetReturnValue
函数设置返回值并关闭窗口,这里的SetReturnValue
函数是客户端JavaScript函数,用于设置window.returnValue
并关闭窗口。
三、弹出窗口后台代码(downs.aspx.cs)
1、C#代码部分:用于绑定数据到GridView控件。
using System; using System.Data; using System.Web.UI; using System.Web.UI.WebControls; public partial class downs : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SetBind(); } } private void SetBind() { string ConnString = "server=.;uid=sa;pwd=yourpassword;database=Northwind"; //根据实际情况修改连接字符串 using (SqlConnection conn = new SqlConnection(ConnString)) { conn.Open(); string sql = "SELECT top 10 OrderId as infor_id, CustomerId as infor_name, EmployeeID as infor_psw FROM Orders"; //根据实际情况修改SQL语句 SqlDataAdapter ada = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet(); ada.Fill(ds); gvshow.DataSource = ds.Tables[0]; this.gvshow.DataBind(); } } }
2、说明:在Page_Load
事件中判断是否为首次加载页面,如果是则调用SetBind
方法从数据库中获取数据并绑定到GridView控件,这里的数据库连接字符串和SQL语句需要根据实际情况进行修改。
1、问:为什么弹出窗口关闭后无法获取返回值?
答:可能有以下原因:一是弹出窗口中没有正确设置window.returnValue
;二是主页面中的JavaScript代码没有正确处理弹出窗口的返回值;三是浏览器兼容性问题导致showModalDialog
或window.open
方法行为不一致,请检查弹出窗口和主页面的代码逻辑是否正确,并确保在不同浏览器中进行测试。
2、问:如何在弹出窗口中传递多个参数给主页面?
答:可以通过将多个参数拼接成一个字符串(使用特定的分隔符),然后设置给window.returnValue
,主页面再通过分割字符串的方式获取各个参数值,也可以使用JSON格式来传递复杂类型的数据。