• <%%>与<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控件标签之间的规则同<%#%>相同,即可放于嵌套控件标签对之间,而不能放于非嵌套控件标签之间

    总结

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

  • 相关阅读:
    PPT文档页数显示的增加和更新
    Android http超时选项的测试
    64位win7硬盘安装64位ubuntu 13.04
    为博客园添加目录的配置总结
    Android webview通过http get下载文件下载两次的问题及解决方法
    ubuntu12.04安装搜狗输入法和配置
    samsung Galaxy s2(GT i9100g )刷机升级至4.4小记
    uva 11584 Partitioning by Palindromes
    uva 10534 Wavio Sequence
    poj 1185 炮兵阵地
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3483343.html
Copyright © 2020-2023  润新知