在做ASP.net的項目時,碰到在頁面上輸入一些數據后,然后點擊提交按鈕,然后服務器端校驗數據,如果數據不合格,用
Response.Write("<script>alert(' 用戶名不存在!')</script>")
向客戶端推出一個警告窗口提示,這時候會發(fā)現,顯示警告窗口的時候,在警告窗口的背面頁面是一片空白,非得你按了警告窗口上的確定按鈕,主頁面才會顯示出需要的內容。
為什么會出現一個頁面白板呢?包括服務器端向客戶端推出的 showModalDialog 模態(tài)窗口一樣,用 Response.Wrtie()輸出到客戶端頁面,可以通過查看生成頁面的源文件,就能發(fā)現是在頁面的最前面加上了 alert() 或 showModalDialog() js函數,這種警告窗口或模態(tài)窗口彈出來之后,將會阻止頁面顯示接下來的內容,所以您看到的就是一片空白,只有用戶關了警告或模態(tài)窗口才會繼續(xù)顯示頁面內容。那么怎么才能讓顯示 alert對話框或 showModalDialog 窗口時,主頁面有內容顯示呢?很簡單,需要讓生成的 html 中 alert 和 showModalDialog 處在顯示內容的后面。
下面這個做法是:用Page.RegisterStartupScript()方法注冊頁面執(zhí)行腳本,它會把注冊的腳本放在Web 窗體的結尾處,即</form>標記之前
Page.RegisterStartupScript("msg", "<script>alert('用戶名Unmi不存在!')</script>");
也就是 form 的內容顯示完之后才執(zhí)行這一段腳本--彈出警告窗口,所以頁面不會空白。如果這個 WebForm 幾乎包含了頁面所有顯示內容,那么從語義上講也可以說是在 document 加載完后彈出警告窗口。
由此我們也能想到,如果給頁面加個 window.onload 事件的處理函數,在這個處理函數中彈出警告窗口,那么不管是放在前面還是后面都不會影響到頁面的顯示(不會出現白板現象),因為它總是等待document加載完成后才執(zhí)行的,因此我們也可以這樣寫:
Response.Write("<script >function window.onload() {alert('用戶名Unmi不存在!');}</script>"); //這里重寫了 window 的 onload 函數。
另外:還有 RegisterClientScriptBlock 也可用來解決類似問題,在Page.RegisterClientScriptBlock和Page.RegisterStartupScript有何區(qū)別?一文中說,RegisterClientScriptBlock 一般返回的是客戶端函數的包裝,而 RegisterStartupScript 返回得函數在 document 裝載完成后會執(zhí)行,類似于我們平時所說的body onload="f()" 里面的函數;這兩個方法在客戶端呈現的代碼位置不同,RegisterClientScriptBlock 在 <form runat=server> 之后,而 RegisterStartupScript 在 </form> 之前。
要更清楚的知道 RegisterClientScriptBlock 和 RegisterClientScriptBlock 有什么區(qū)別,只要觀察一下生成的 HTML 源文件就知道了。
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網友會為你解答??! 點擊進入論壇