如何在ASP.NET程式中彈出新視窗並得到傳回值

來源:互聯網
上載者:User

首先,我們從簡單的例子開始,這個例子示範了如何在頁面中點擊按鈕開啟新頁面,輸入資料,然後返回到初始頁面並進行更新。
 

1.       用VS.NET建立一個項目,選擇“Asp.net Web應用程式”
2.       在WebForm1.aspx視窗上增加一個TextBox和一個Button
3.       在WebForm1.aspx的代碼中Page_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()")

4.       增加一個WebForm2
5.       切換到HTML,刪除<body></body>段間內容,代替為

<frameset rows="0,*">
              <frame src="about:blank">
              <frame src="WebForm3.aspx">
       </frameset>

6.       建立一個WebForm3
7.       切換到HTML,在<body>裡增加一個“ID=’MyBody’”
8.       在WebForm3上加上一個TextBox和一個Button
9.       在代碼裡增加一個變數

Protected MyBody As System.Web.UI.HtmlControls.HtmlControl

10.   在Page_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
 好了,現在運行試試,出錯了,怎麼會這樣呢?

 現在我們在WebForm3的HTML頁面中,找到<body>區,增加一個runat="server"
再運行一下,一切OK了吧。

現在我們來看一下上面的代碼,

首先,在WebForm1初始時,我們定義了一個叫“clientScript”的JavaScript指令碼塊,並且在這個頁中註冊了這個指令碼塊。

這個指令碼塊定義了一個函數OpenWin
function OpenWin()
{
var str=window.showModalDialog('WebForm2.aspx',document.Form1.TextBox1.value)
if (str!=null)
document.Form1.TextBox1.value=str
}
 

並且將這個函數與按紐Button1的OnClick事件關聯起來。

這個函數用window的ShowModalDialog事件開啟一個模態的對話方塊網頁WebForm2.aspx,參數是TextBox中的值
其次,在WebForm2中,我們不寫代碼,只是讓WebForm2作為一個容器,定義為架構,其中WebForm3是架構裡的一個網頁。

最後,我們轉到WebForm3中,Page_Load中的指定的JavaScript代碼,是讓WebForm2的傳回值為WebForm3中TextBox值,然後關閉WebForm2。

很明顯,WebForm2隻是一個過渡頁面,為什麼要多此一舉呢?
我們試著將WebForm1的JavaScript指令碼修改一下,直接開啟WebForm3.aspx,然後在WebForm3的Page_Load中,將Window.Parent修改為Window,然後再運行一遍,看看會發生什麼。
開啟網頁對話方塊,一切正常,但是在對話方塊中,按鍵卻不能返回,既沒有傳回值,也不能關閉自己,只是有視窗一閃而過。
這是怎麼回事呢?
其實,是因為我們用window.showModalDialog開啟模態對話方塊的原因。對於一個用ShowModalDialog方式開啟的模態對話方塊,沒有辦法用Window.close()的方式來關閉的。按按紐後,開啟了一個新的頁面,然後又關閉了這個頁面。

所以我們用WebForm2中frame來防止提交時開啟新頁面。

那麼,我們不用ShowModalDialog,而用Open會怎麼樣呢?
在WebForm1中,繼續修改指令碼
window.open('WebForm3.aspx', 'newwindow', 'height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no')
這下開啟到很正常,只是參數傳不進去了也傳不出來了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.