ASPNET中彈出窗口是如何實現的呢?作為Microsoft的最新建立動態Web網站的工具ASPNET相對於ASP和JSP在改變原始的Web編程方式方面有了長足的長進它的代碼與頁面分離技術(CodeBehind)以及完善的Web服務器控件為程序員提供了一個更加符合傳統編程的Web服務器端開發方式但Web編程還是有著與傳統編程不相同的特點這些特點決定了ASPNET編程中必須以一些特殊的技巧來完成程序要求彈出窗口正是這類編程方式的代表相當多的編程書籍對彈出窗口采取緘默或者一語帶過似乎看不過彈出窗口的巨大使用天地本文將為你解開彈出窗口使用中的大多數問題
為了提高網站的訪問的並發度和吞吐量與其它服務器腳本一樣ASPNET同樣使用了客戶端腳本來減輕服務器的壓力那就是ASPNET中彈出窗口技術ASPNET到現在(版)為止並不直接支持彈出窗口必須通過JavaScript(或VBScript)來使用客戶端彈出窗口
一 警告窗口與在CodeBehind中使用客戶端腳本的方式
要在浏覽器中彈出一個最簡單的警告窗口可以使用JavaScript語句
windowalert( [sMessage])
其中sMessage是提示信息可惜這樣的彈出窗口是只有一個確定按鈕只能起到提示作用如果我們要在刪除記錄時候彈出一個詢問的彈出窗口此時你需要使用
bConfirmed = nfirm( [sMessage])
其中bConfirmed是返回值sMessage是提示信息這個彈出窗口有兩種選擇確定或放棄其選擇的返回值放在bConfirmed中可供代碼作出判斷
為了提高代碼的可重用性與可讀性應當使JavaScript與Codehind相互溶合通常有兩種方式可以達到這樣的效果
() 使用ResponseWrite方法ASPNET中彈出窗口
使用ResponseWrite方法早在ASP時代就已經被支持了它可以把代碼寫到客戶端是一種相當方便且直觀的方法以下代碼演示了如何使用ResponseWrite方法來顯示一個警告信息
Private Sub btAlert_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs)
Handles btAlertClick 演示ResponseWrite方法和alert窗口
ResponseWrite( ) End Sub
() 使用RegisterXXX方法ASPNET中彈出窗口
如果你觀察ResponseWrite的生成HTML代碼你會發現ResponseWrite方法生成的代碼是寫到了HTML代碼的最開始即標簽之前此時所有的 HTML對象都還沒有生成如果要想使用HTML內的對象並與之交互就會出現找不到對象的錯誤因此筆者推薦一個更加符合CodeBehind方式的方式使用RegisterXXX方法RegisterXXX包括RegisterClientScriptBlockRegisterStartupScript以及用於判斷的IsStartupScriptRegistered函數
RegisterStartupScript 的原型是
Overridable Public Sub RegisterStartupScript( _ ByVal key As String _ ByVal script As String _ )
其中key表示這個腳本的唯一標識script是代表腳本的字符串
RegisterClientScriptBlock的原型與RegisterStartupScript相同兩個函數不同在於將其包含的腳本代碼寫入到HTML文件的不同位置RegisterClientScriptBlock在 Page 對象的 元素的開始標記後立即發出客戶端腳本RegisterStartupScript則是在Page 對象的 元素的結束標記之前發出該腳本如果你的腳本有與頁面對象(doucument對象)進行交互的語句(這在我們後面的例子中看到)則推薦使用RegisterStartupScript反之如果要想客戶端腳本盡可能早的執行則可以使用RegisterClientScriptBlock或ResponseWrite
為了防止在頁面中反復加入腳本在注冊腳本時ReisterStartupScript/RegisterClientScriptBlock使用了key作為注冊的Key然後在程序中可以使用IsClientScriptBlockRegistered作判斷
以下例子將使用RegisterClientScriptBlock來演示confirm的使用方法
Private Sub btConfirm_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles btConfirmClick 演示RegisterClientScriptBlock方法和confirm窗口
If (Not IsClientScriptBlockRegistered(clientScript)) Then
判斷是否已經加入了該腳本沒有則加入
Dim strScript As String strScript =
注冊腳本 RegisterClientScriptBlock(clientScript strScript)
如果選擇否則繼續向下執行
End If End Sub
二ASPNET中彈出窗口之彈出指定頁面
光有提示窗口還遠遠不能滿足我們的要求在程序中我們常常需要彈出指定頁面此時可以使用JavaScript的windowopen方法配合前面的RegisterClientSciptBlock方法我們就可以實現指定頁面的彈出
以下代碼展示了如何彈出指定頁面:
Private Sub btWinOpen_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs)
Handles btWinOpenClick使用windowopen與registerStartupScript簡單演示
If (Not IsClientScriptBlockRegistered(OpenScript)) Then 判斷是否已經加入了該腳本沒有則加入
Dim strScript As String = RegisterStartupScript(OpenScript strScript)
End If End Sub
程序使用Windowopen方法來彈出新的頁面它只一個參數新的彈出窗口的URL地址事實在windowopen方法有多個參數但這是javascipt的簡單內容我們將不會在這兒詳細分說如果你有相關的問題請查詢MSDN
這段程序在IE中直接使用一切正常但如果你正在使用類如GoSurfMyIENetCapter之類的浏覽器那麼很不幸! 你將看不到彈出窗口這就是我們將要討論的彈出窗口過濾問題
三ASPNET中彈出窗口之非標准IE浏覽器對彈出窗口的過濾行為討論
廣告窗口的泛濫使得不少網民不堪鋪天蓋地的廣告騷擾紛紛放棄標准IE浏覽器而使用諸如GoSurfMyIENetCapter這樣的使用IE內核支持多頁面並能自動屏蔽廣告的軟件據說在即將發布的IE sp中微軟也將加入封殺廣告窗口功能這對大多數網民當然是件好事可對於程序員而言我們使用彈出窗口的方式與一般廣告並無本質的不同這樣的窗口也會被彈出窗口管理器不分青紅皂白的封殺其結果當然是我們不願看到的
ASPNET中彈出窗口相關的信息就介紹到這裡希望對你有所幫助
From:http://tw.wingwit.com/Article/program/net/201311/12847.html