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

 

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

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


<%%>与<scriptrunat=server>

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

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

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

       举例: 

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
    <script runat="server">
        string a = "HelloWorld";
        public void test() {
            Response.Write(a);
        }
        //直接写语句,错误的写法
        //Response.Write("a");
        
    </script>
    <%
        string a = "HelloWorld";
        Response.Write(a);
        
        //声明函数,错误的写法
        //public void test2() {}
         %>
<body>
</body>
</html>   

上面为使用上得区别,究其原因,应该在ASP.NET页面编译上。编译时每个ASPX页面被编译成一个直接或间接继承于PAGE类的类:

Ø  <%%>称为渲染代码区,在这个类中扮演的是其中一个方法(会被编译到PAGE类的Render方法中),也就是说,所有写在

<%%>中的代码编译后都成为某个方法内的语句块。那么在<%%>中所能包含的就只能是在一个方法里面所能包含的东西了,就是

一个方法的一对大括号中所能写的东西才能写在<%%>中

Ø  <script runat=server>称为代码声明区,其中的代码则被编译为类的花括号之间的内容,也就是说一个类所能包含的内容都

能写在<scriptrunat="server"></script>标签中间。

这也就不奇怪,两者之间所写内容限制的区别了。


<%=%>与<%#%>

二者都用于在前台页面绑定后台的一些变量或返回值进行显示,而用法也有很大差别:

Ø 首先,字面上的区别,前者是输出,而后者是赋值

<%= "A" % > 相当于:Response.Write("A");

<%# "A" % > 相当于:变量="A";

举例:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="TextBox1" runat="server" Text="<%#"Hello" %>"></asp:TextBox>
    <div>
        <%="Hello" %>
        <%#"Hello" %>
    </div>
    </form>
</body>
</html>


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

              <%="Hello" %>相当于Response.Write("Hello");

 

那么第二个 <%# Hello% >怎么解释呢?如果按照我“赋值”的说法,它把值赋给谁了呢?可以查看后台代码是这样的:

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

 

Ø 在应用过程中,二者使用的位置和时机是有很大区别的

一般来说,在前台代码的三种位置可能会用到两种符号来(绑定、显示)后台变量:

Ø  JavaScript代码中

Ø  服务器端控件属性或HTML标签属性

Ø  Html显示内容的位置,即,它作为占位符把变量显示于符号出现的位置(例如div之间)

对三个位置进行了简要实验:

位置一:一般只要绑定的后台变量和JavaScript中数据类型兼容即可。

位置二和三:

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication4
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        public string name = "我是后台变量";
        protected void Page_Load(object sender, EventArgs e)
        {
            this.DataBind();
           
        }
        //不能为private
        protected string strTest() {
            return "后台方法";
        }
 
    }
}

<%#%>可用位置

              (1)Html控件和Web控件的属性赋值,如:


              (2)作为显示内容显示在占位位置,如上面的<%#name%>

              (3)Web控件一对标签属性之间,这里需要注意,只有一部分控件的标签属性对之间可以使用比如标签(Label)控件,而一部分不能使用,比如文本(TextBox)控件,这是因为Label属于嵌套类控件,而TextBox属于非嵌套类控件。

如:

 


<%=%>可用位置

(1)    只能为Html控件属性赋值,而不能为Web控件属性赋值,如:


(2)    可作为显示内容,显示在占位位置,如上面的<%=name%>

(3)    放与Web控件标签之间的规则同<%#%>相同,即可放于嵌套控件标签对之间,而不能放于非嵌套控件标签之间

总结

       这些都是使用过程中总结出来的小经验,熟练掌握,还是能提高一点学习效率的,请大家借鉴。

原文地址:https://www.cnblogs.com/fuhaots2009/p/3483343.html