这些东西都是asp.net前台页面与后台代码交互过程中经常使用的,它们之间有的非常相似,又有一些不同。对比学习下,看看他们之间的联系与区别。

  首先看<%%>与<scriptrunat=server>,再看<%#%>与<%=%>的联系与区别:

<%%>与<scriptrunat=server>

  在asp.net的前台页面(.aspx)文件中,以上的两种方式都被允许来插入代码片段。但是用的时候可以看的出,二者之中插入的代码的限制是不同的。

  <%%>一般都是声明一些变量,写一些输出语句,还可以引用一些服务器端的变量,调用服务器端的函数。而其本身内部确不能声明函数或过程。

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

举例:

  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";

   举例:  

  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中数据类型兼容即可。

   位置二和三:

    先定义后台方法和变量,然后在前台进行绑定实验,后台代码(定义方法):   

  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>,<%=%>与<%#%>的区别(转)的更多相关文章

  1. <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别

      这些东西都是asp.net前台页面与后台代码交互过程中经常使用的,它们之间有的非常相似,又有一些不同.对比学习下,看看他们之间的联系与区别. 首先看<%%>与<scriptrun ...

  2. Java虚拟机6:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别

    前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露.并行与并发.Client模式和Server模式.Minor GC和Full GC,本文详细讲解下这些概念的区别. 内存溢出 ...

  3. Response.Redirect()、Server.Execute和Server.Transfer的区别

    1.Response.Redirect(): Response.Redirect方法导致浏览器链接到一个指定的URL. 当Response.Redirect()方法被调用时,它会创建一个应答,应答头中 ...

  4. asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别

    asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别(一) HttpUtility.UrlEncode 方法: 对 ...

  5. HttpUtility.UrlEncode 和Server.UrlEncode的区别,记录记录,被乱码搞晕头了。。。。。

    今天修改原来的站点,有几个session和cookies乱码问题,然后又好好看了一下关于编码这块的内容. 大概是:登录处,用session记录了一点中文内容.然后cookies也记录了一点中文内容,取 ...

  6. Oracle、Mysql、Sql Server语句的区别

    1.空值的处理——判断是否为空,为空时取一个值,不为空时取另一个值 1).Sql Server 中 ISNULL(check_expression,replacement_value) 解释:如果ch ...

  7. JVM client模式和Server模式的区别

    在“你知道自己执行的是哪个jre吗?”一文中我们知道安装JDK时会安装了两套JRE:专用和公用,殊不知这两套JRE还有秘密. 专用和公用JRE的不同 不同点在于专用JRE的bin里不仅有“client ...

  8. mysql、oracle和SQL server数据库的区别

    1.总体对比. SQL,在这里我理解成SQL Server.三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相 ...

  9. Windows Server、 Windows 区别

    今天脑补了普通Windows 操作系统与Windows Server区别,感觉清楚了很多. Microsoft WindowsServer,是美国微软公司研制的一套操作体系,它面世于1985年,起先仅 ...

随机推荐

  1. [转载]Linux 卸载JDK并安装新版本JDK (rpm,tar)

    FROM:http://josh-persistence.iteye.com/blog/1908549 一.查看Jdk的安装路径: whereis javawhich java (java执行路径)e ...

  2. 2017.7.21 Linux中ELK服务后台运行方式

    通过 2017.7.18 linux下ELK环境搭建 搭建好服务于之后,一旦按下Ctrl+C或者退出登录会话,服务的进程就随之停止了.要长期在后台运行此程序,有几种方式: 1 nohup 输入Ctrl ...

  3. NYOJ 49 开心的小明(01背包问题)

    时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 小明今天非常开心.家里购置的新房就要领钥匙了,新房里有一间他自己专用的非常宽敞的房间.更让他高兴的是.妈妈昨天对他说: ...

  4. 数据库设计--数据流图(DFD)

    1.数据流图的定义 数据流图(DFD)是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程, 因为它仅仅反映系统必须完毕的逻辑功能.所以它是一种功能模型. 在结构化开发方法中. ...

  5. SQL - 获取多机构最近相同节点

    -- Create Branches Table create table Branches ( BranchCode ) ,BranchName ) ,L0BCode ) ,L1BCode ) ,L ...

  6. 《TCP/IP具体解释卷2:实现》笔记--IP的分片和重装

    IP首部内有三个字段实现分片和重装:标识字段(ip_id).标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位 比特).标志字段由3个1bit标志组成.比特0是保留的必须为0, ...

  7. 阿里CI/CD、DevOps、分层自动化技术

    原文地址:http://www.infoq.com/cn/news/2017/01/alibaba-yunxiao-cicd-devops 在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还 ...

  8. C++ 输出100—999中所有的水仙花数

    输出100-999中所有的水仙花数,若3位数xyz满足 , 则xyz为水仙花数,例如 , 因此153是水仙花数. #include <iostream> using namespace s ...

  9. Memcached的LRU和缓存命中率

    缓存命中率 命中:直接从缓存中读取到想要的数据. 未中:缓存中没有想要的数据,还需要到数据库进行一次查询才能读取到想要的数据. 命中率越高,数据库查询的次数就越少. 读取缓存的速度远比数据库查询的速度 ...

  10. thread.join() 方法存在的必要性是什么?

    好久远的问题,为什么关注这个问题的人这么少? 或许是用到这个功能的情形比较少吧. 1.等待处理结果 为什么要用join()方法在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算 ...