1. 程式人生 > >淺析.net在後臺程式碼中彈出頁面提示框

淺析.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前:

  1. <!DOCTYPE html>

  2. <html xmlns="http://www.w3.org/1999/xhtml">

  3. <head><title>

  4. </title></head>

  5. <body>

  6. <form method="post" action="WebForm1.aspx" id="form1">

  7. <div>

  8. <input type="submit" name="Button1" value="Button" id="Button1" />

  9. </div>

  10. </form>

  11. </body>

  12. </html>

alert後:

  1. <script>alert('提示內容!');</script>

  2. <!DOCTYPE html>

  3. <html xmlns="http://www.w3.org/1999/xhtml">

  4. <head><title>

  5. </title></head>

  6. <body>

  7. <form method="post" action="WebForm1.aspx" id="form1">

  8. <div>

  9. <input type="submit" name="Button1" value="Button" id="Button1" />

  10. </div>

  11. </form>

  12. </body>

  13. </html>

不用看的很仔細,只要看最上面一行就可以了。這兩種方法alert時在前臺最上端增加了

<script>alert('提示內容!');</script>

這一行程式碼。我們可以看到,按照程式碼執行順序,很明顯在頁面什麼內容都沒有顯示的時候就會先執行alert,所以會導致白屏。

2.方法3和方法4是不是也很像,但是他們為什麼效果不一樣呢,讓我們也來用上面的方法看一下alert後html原始碼的區別。

方法3 alert後:

  1. <!DOCTYPE html>

  2. <html xmlns="http://www.w3.org/1999/xhtml">

  3. <head><title>

  4. </title></head>

  5. <body>

  6. <form method="post" action="WebForm1.aspx" id="form1">

  7. <div>

  8. <input type="submit" name="Button1" value="Button" id="Button1" />

  9. </div>

  10. <script>alert('提示資訊!');</script>

  1. </form>

  2. </body>

  3. </html>

在這個方法中alert指令碼出現在form結束標籤之前,所以當前面的內容都執行結束後才執行alert,因此不會顯示白屏。  

方法4 alert後:

  1. <!DOCTYPE html>

  2. <html xmlns="http://www.w3.org/1999/xhtml">

  3. <head><title>

  4. </title></head>

  5. <body>

  6. <form method="post" action="WebForm1.aspx" id="form1">

  7. <script>alert('提示內容!');</script>

  8. <div>

  9. <input type="submit" name="Button1" value="Button" id="Button1" />

  10. </div>

  11. </form>

  12. </body>

  13. </html>

我們發現alert指令碼增加的位置是緊跟在form標籤後的,也就是說會先於form標籤中其他內容執行,因此出現白屏效果。

總結一下,使用註冊指令碼的方法3和方法4,首要前提是前臺需要有form標籤,然後兩種方法註冊的事件位置不同。使用這兩種方法還可以註冊一些其他事件,不要使用方法4時一定要注意,因為註冊位置緊挨form,千萬不要引用之後宣告的標籤內容,否則會出錯。

以後大家需要在後臺彈出提示框時,就可以根據需要,選擇適當的方法啦。

--------------------- 本文來自 xiaozhudan1110 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/xiaozhudan1110/article/details/18601719?utm_source=copy