如何點擊按鈕彈出新窗口,輸入數(shù)據(jù)后返回并刷新頁面?在一些.NET論壇中有人經(jīng)常會問:如何在頁面中點擊按鈕打開新頁面,輸入數(shù)據(jù),然后返回到初始頁面并進行更新?要解決這個問題,應(yīng)該弄清楚window.showModalDialog()的用法,本人在http://www.csdn.net/Develop/read_article.asp?id=15113已經(jīng)做過介紹。下面就用例子介紹如何在ASP.NET中實現(xiàn)這個功能。
本例子共3個頁面,其中WebForm2.aspx是過渡頁面,是為了防止提交時打開新頁面。 WebForm1.aspx <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="ShowModalDialog.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta content="Microsoft Visual Studio .NET 7.0" name="GENERATOR"> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body MS_POSITIONING="GridLayout"> <div align="center"> <form id="Form1" method="post" runat="server"> <asp:label id="Label1" runat="server" Font-Bold="true"> 從當(dāng)前頁面打開新窗口,并把變量傳遞到新窗口的例子,可以多次打開提交。 </asp:label><br> <br> <asp:textbox id="TextBox1" runat="server" Width="600px">這是初始值,將被傳遞到新窗口。</asp:textbox><br> <br> <asp:button id="Button1" runat="server" Text="打開窗口" Width="96px"></asp:button></form> </div> </body> </HTML> WebForm1.aspx.vb Public Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Button1 As System.Web.UI.WebControls.Button #Region " Web 窗體設(shè)計器生成的代碼 " ‘該調(diào)用是 Web 窗體設(shè)計器所必需的。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init ‘CODEGEN: 此方法調(diào)用是 Web 窗體設(shè)計器所必需的 ‘不要使用代碼編輯器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ‘在此處放置初始化頁的用戶代碼 If (Not IsClientScriptBlockRegistered("clientScript")) Then Dim strScript As String = "<script>" + vbCrLf strScript += "function OpenWin(){" + vbCrLf strScript += "var str=window.showModalDialog(‘WebForm2.aspx‘,document.Form1.TextBox1.value)" + vbCrLf strScript += "if(str!=null) document.Form1.TextBox1.value=str" + vbCrLf strScript += "}" + vbCrLf strScript += "</script>" + vbCrLf RegisterClientScriptBlock("clientScript", strScript) End If Button1.Attributes.Add("onclick", "OpenWin()") End Sub End Class WebForm2.aspx <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb" Inherits="aspxWeb.mengxianhui.com.WebForm2"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm2</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <frameset rows="0,*"> <frame src="about:blank"> <frame src="WebForm3.aspx"> </frameset> </HTML> WebForm2.aspx.vb Public Class WebForm2 Inherits System.Web.UI.Page #Region " Web 窗體設(shè)計器生成的代碼 " ‘該調(diào)用是 Web 窗體設(shè)計器所必需的。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init ‘CODEGEN: 此方法調(diào)用是 Web 窗體設(shè)計器所必需的 ‘不要使用代碼編輯器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ‘在此處放置初始化頁的用戶代碼 End Sub End Class WebForm3.aspx <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm3.aspx.vb" Inherits="ShowModalDialog.WebForm3" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm3</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout" id="MyBody" runat="server"> <form id="Form1" method="post" runat="server"> <asp:Label id="Label1" runat="server">請輸入您的大名:</asp:Label><br> <br> <asp:TextBox id="TextBox1" runat="server" Width="558"></asp:TextBox><br> <br> <asp:Button id="Button1" runat="server" Text=" 提 交 "></asp:Button> </form> </body> </HTML> WebForm3.aspx.vb Public Class WebForm3 Inherits System.Web.UI.Page Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Button1 As System.Web.UI.WebControls.Button Protected MyBody As System.Web.UI.HtmlControls.HtmlControl #Region " Web 窗體設(shè)計器生成的代碼 " ‘該調(diào)用是 Web 窗體設(shè)計器所必需的。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init ‘CODEGEN: 此方法調(diào)用是 Web 窗體設(shè)計器所必需的 ‘不要使用代碼編輯器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ‘在此處放置初始化頁的用戶代碼 If IsPostBack Then Dim strScript As String = "<script>" + vbCrLf strScript += "window.parent.returnValue=‘" + TextBox1.Text.Replace("‘", "\‘") + "‘" + vbCrLf strScript += "window.parent.close()" + vbCrLf strScript += "</script>" + vbCrLf If (Not IsClientScriptBlockRegistered("clientScript")) Then RegisterClientScriptBlock("clientScript", strScript) End If End If If Not IsPostBack Then MyBody.Attributes.Add("onload", "document.Form1.TextBox1.value=window.parent.dialogArguments") End If End Sub End Class |
|