1. 程式人生 > ><%%>與<scriptrunat=server>,<%=%>與<%#%>的區別(轉)

<%%>與<scriptrunat=server>,<%=%>與<%#%>的區別(轉)

所有 server 應用 arp view boa size 類型兼容 org

這些東西都是asp.net前臺頁面與後臺代碼交互過程中經常使用的,它們之間有的非常相似,又有一些不同。對比學習下,看看他們之間的聯系與區別。

  首先看<%%>與<scriptrunat=server>,再看<%#%>與<%=%>的聯系與區別:

<%%>與<scriptrunat=server>

  在asp.net的前臺頁面(.aspx)文件中,以上的兩種方式都被允許來插入代碼片段。但是用的時候可以看的出,二者之中插入的代碼的限制是不同的。

  <%%>一般都是聲明一些變量,寫一些輸出語句,還可以引用一些服務器端的變量,調用服務器端的函數。而其本身內部確不能聲明函數或過程。

  <scriptrunat=server>中只能放置方法和屬性等,而不能直接添加語句和表達式。

舉例:

[html] view plain copy
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head runat="server">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  4. <title></title>
  5. </head>
  6. <script runat="server">
  7. string a = "HelloWorld";
  8. public void test() {
  9. Response.Write(a);
  10. }
  11. //直接寫語句,錯誤的寫法
  12. //Response.Write("a");
  13. </script>
  14. <%
  15. string a = "HelloWorld";
  16. Response.Write(a);
  17. //聲明函數,錯誤的寫法
  18. //public void test2() {}
  19. %>
  20. <body>
  21. </body>
  22. </html><span style="font-family: ‘Microsoft YaHei‘; font-size: 14px;"> </span>

  上面為使用上得區別,究其原因,應該在ASP.NET頁面編譯上。編譯時每個ASPX頁面被編譯成一個直接或間接繼承於PAGE類的類:

  ? <%%>稱為渲染代碼區,在這個類中扮演的是其中一個方法(會被編譯到PAGE類的Render方法中),也就是說,所有寫在

<%%>中的代碼編譯後都成為某個方法內的語句塊。那麽在<%%>中所能包含的就只能是在一個方法裏面所能包含的東西了,就是

一個方法的一對大括號中所能寫的東西才能寫在<%%>中

在C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\中有緩存文件,可反編譯的看

技術分享

技術分享

  ? <script runat=server>稱為代碼聲明區,其中的代碼則被編譯為類的花括號之間的內容,也就是說一個類所能包含的內容都

能寫在<scriptrunat="server"></script>標簽中間。

技術分享

  這也就不奇怪,兩者之間所寫內容限制的區別了。

<%=%>與<%#%>

  二者都用於在前臺頁面綁定後臺的一些變量或返回值進行顯示,而用法也有很大差別:

  ? 首先,字面上的區別,前者是輸出,而後者是賦值

   <%= "A" % > 相當於:Response.Write("A");

   <%# "A" % > 相當於:變量="A";

   舉例:  

[html] view plain copy
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head runat="server">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  4. <title></title>
  5. </head>
  6. <body>
  7. <form id="form1" runat="server">
  8. <asp:TextBox ID="TextBox1" runat="server" Text="<%#"Hello" %>"></asp:TextBox>
  9. <div>
  10. <%="Hello" %>
  11. <%#"Hello" %>
  12. </div>
  13. </form>
  14. </body>
  15. </html>

   上面的Text="<%#"Hello" %>"相當於TextBox1.text=”Hello”;

   <%="Hello" %>相當於Response.Write("Hello");

  那麽第二個 <%# Hello% >怎麽解釋呢?如果按照我“賦值”的說法,它把值賦給誰了呢?可以查看後臺代碼是這樣的:

(new System.Web.UI.LiteralControl()).Text="Hello";

  ? 在應用過程中,二者使用的位置和時機是有很大區別的

   一般來說,在前臺代碼的三種位置可能會用到兩種符號來(綁定、顯示)後臺變量:

   ? JavaScript代碼中

   ? 服務器端控件屬性或HTML標簽屬性

   ? Html顯示內容的位置,即,它作為占位符把變量顯示於符號出現的位置(例如div之間)

  對三個位置進行了簡要實驗:

   位置一:一般只要綁定的後臺變量和JavaScript中數據類型兼容即可。

   位置二和三:

    先定義後臺方法和變量,然後在前臺進行綁定實驗,後臺代碼(定義方法):   

[csharp] view plain copy
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApplication4
  8. {
  9. public partial class WebForm1 : System.Web.UI.Page
  10. {
  11. public string name = "我是後臺變量";
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14. this.DataBind();
  15. }
  16. //不能為private
  17. protected string strTest() {
  18. return "後臺方法";
  19. }
  20. }
  21. }

  <%#%>可用位置

(1)Html控件和Web控件的屬性賦值,如:

     技術分享

(2)作為顯示內容顯示在占位位置,如上面的<%#name%>

(3)Web控件一對標簽屬性之間,這裏需要註意,只有一部分控件的標簽屬性對之間可以使用比如標簽(Label)控件,而一部分不能使用,比如文本(TextBox)控件,這是因為Label屬於嵌套類控件,而TextBox屬於非嵌套類控件。

如:

      技術分享

  <%=%>可用位置

    (1) 只能為Html控件屬性賦值,而不能為Web控件屬性賦值,如:

     技術分享

    (2) 可作為顯示內容,顯示在占位位置,如上面的<%=name%>

    (3) 放與Web控件標簽之間的規則同<%#%>相同,即可放於嵌套控件標簽對之間,而不能放於非嵌套控件標簽之間

總結

這些都是使用過程中總結出來的小經驗,熟練掌握,還是能提高一點學習效率的,請大家借鑒。

<%%>與<scriptrunat=server>,<%=%>與<%#%>的區別(轉)