淺析.net在後臺程式碼中彈出頁面提示框
我們知道在.net後臺彈出alert提示框有很多種方法,包括:
1.Page.Response.Write("<script>alert('提示內容!');</script>"); 白屏
2.HttpContext.Current.Response.Write("<script>alert('提示內容!');</script>"); 白屏
3.Page.ClientScript.RegisterStartupScript(GetType(), "message", "<script>alert('提示內容!');</script>"); 不白屏
4.Page.ClientScript.RegisterClientScriptBlock(GetType(), "message", "<script>alert('提示內容!');</script>"); 白屏
等等方法,但是我們知道他們的區別的具體的實現原理嗎?
1.先來看前兩個,前兩個彈出框的共同特點就是會出現白屏,長得又有點像。肯定有什麼共同點。
我們知道HttpResponse實際上是HttpContext的屬性,在例項化HttpContext的時候可以傳HttpResponse和HttpRequest兩個引數。如果不知道,請參考http://msdn.microsoft.com/library/office/c2zzwa6y(v=vs.90)?cs-save-lang=1&cs-lang=cpp,對上面提到的三個類不熟的童鞋也請自行Google,這裡不做介紹。
我想說的是HttpContext.Current實際上的HttpResponse引數就是this.Page.Response。這樣就簡單明瞭了,那麼this.Page.Response.Write和HttpContext.Current.Response其實就是一個東西啦,都是Response.Write。雖然是一個東西,他們究竟做了什麼使彈出框的時候白屏了呢。
我們使用瀏覽器的開發者工具比較alert前後html原始碼的區別。
alert前:
-
<!DOCTYPE html>
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head><title>
-
</title></head>
-
<body>
-
<form method="post" action="WebForm1.aspx" id="form1">
-
<div>
-
<input type="submit" name="Button1" value="Button" id="Button1" />
-
</div>
-
</form>
-
</body>
-
</html>
alert後:
-
<script>alert('提示內容!');</script>
-
<!DOCTYPE html>
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head><title>
-
</title></head>
-
<body>
-
<form method="post" action="WebForm1.aspx" id="form1">
-
<div>
-
<input type="submit" name="Button1" value="Button" id="Button1" />
-
</div>
-
</form>
-
</body>
-
</html>
不用看的很仔細,只要看最上面一行就可以了。這兩種方法alert時在前臺最上端增加了
<script>alert('提示內容!');</script>
這一行程式碼。我們可以看到,按照程式碼執行順序,很明顯在頁面什麼內容都沒有顯示的時候就會先執行alert,所以會導致白屏。
2.方法3和方法4是不是也很像,但是他們為什麼效果不一樣呢,讓我們也來用上面的方法看一下alert後html原始碼的區別。
方法3 alert後:
-
<!DOCTYPE html>
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head><title>
-
</title></head>
-
<body>
-
<form method="post" action="WebForm1.aspx" id="form1">
-
<div>
-
<input type="submit" name="Button1" value="Button" id="Button1" />
-
</div>
-
<script>alert('提示資訊!');</script>
-
</form>
-
</body>
-
</html>
在這個方法中alert指令碼出現在form結束標籤之前,所以當前面的內容都執行結束後才執行alert,因此不會顯示白屏。
方法4 alert後:
-
<!DOCTYPE html>
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head><title>
-
</title></head>
-
<body>
-
<form method="post" action="WebForm1.aspx" id="form1">
-
<script>alert('提示內容!');</script>
-
<div>
-
<input type="submit" name="Button1" value="Button" id="Button1" />
-
</div>
-
</form>
-
</body>
-
</html>
我們發現alert指令碼增加的位置是緊跟在form標籤後的,也就是說會先於form標籤中其他內容執行,因此出現白屏效果。
總結一下,使用註冊指令碼的方法3和方法4,首要前提是前臺需要有form標籤,然後兩種方法註冊的事件位置不同。使用這兩種方法還可以註冊一些其他事件,不要使用方法4時一定要注意,因為註冊位置緊挨form,千萬不要引用之後宣告的標籤內容,否則會出錯。
以後大家需要在後臺彈出提示框時,就可以根據需要,選擇適當的方法啦。
--------------------- 本文來自 xiaozhudan1110 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/xiaozhudan1110/article/details/18601719?utm_source=copy