ASP.NET 网页中的嵌入式代码块

将代码添加到 ASP.NET 网页中的默认模型要么创建一个代码隐藏类文件(代码隐藏页),要么将页的代码写到具有 runat="server" 特性的 script 块中(单文件页)。 编写的代码通常会与页上的控件进行交互。 例如,通过从代码中设置控件的 Text(或其他)属性,可以在页上显示信息。

另一种可能是使用嵌入式代码块将代码直接嵌入到页中。

嵌入式代码块

嵌入式代码块是在呈现页面的过程中执行的服务器代码。 块中的代码可以执行编程语句,并调用当前页类中的函数。

下面的代码示例演示包含嵌入式代码块的 ASP.NET 页,该代码块显示循环结果。

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
    <% for(int i = 0; i < 6; i++) %>
       <% { Response.Write("<br>" + i.ToString()); }%>
    </form>
</body>
</html>

下面的代码示例演示一个嵌入式代码块,该代码块显示 span 元素中的公共 GetTime() 函数的值。 在嵌入式代码块中,语法 <% = expression %> 用于解析表达式,并将其值返回到块中。

<%@ Page Language="C#" %>
<script runat=server>
protected String GetTime()
{
    return DateTime.Now.ToString("t");
}
</script>
<html>
<body>
    <form id="form1" runat="server">
       Current server time is <% =GetTime()%>.
    </form>
</body>
</html>

嵌入式代码块必须使用页的默认语言进行编写。 例如,如果页的 @ Page 指令包含特性 language="VB",则页将使用 Visual Basic 编译器对标有 runat="server" 的所有脚本块中的代码以及 <% %> 分隔符中的所有内嵌代码进行编译。

ASP.NET 网页中支持嵌入式代码块,主要用于保留与旧的 ASP 技术的向后兼容性。 一般情况下,将嵌入式代码块用于复杂的编程逻辑并不是最佳做法,因为当页中的代码与标记混合时,很难进行调试和维护。 此外,由于代码仅在呈现页的过程中执行,因此与将代码置于适当的页处理阶段以执行后台代码或脚本块代码相比,其灵活性大大降低。

嵌入式代码块的部分用途包括:

  • 将控件元素或标记元素的值设置为函数返回的值,如前面的示例所示。
  • 将计算直接嵌入到标记或控件属性中。
一. <%%>
这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或
者javascript代码,而在asp.net中用的是.net平台下支持的语言。特别
注意:服务器控件中不能包含<%%>的语法,否则出错。如下,我们可以
在.aspx页面里出现如下代码:

1 <%
2   int a = 2;
3   int b = 3;
4   int c = a + b;
5   Response.Write(c);
6  %>

二. <%#%>
这种格式是asp.net下特有的,它是控件数据绑定的语法,且必须要调用该

控件的DataBind()方法才执行(或者整个页面Page.DataBind()也就是对

所得控件都调用DataBind()方法)特别。

注意:只有服务器控件才能用<%#%>的语法  aspx.cs代码如下:

1 <div>
2 Server Control:<asp:TextBox runat="server" Text="<%#text%>"></asp:TextBox><br /><!--Server Control-->
3 Client Control:<input type="text" value="<%#text%>" /><!--Client Control-->
4  </div>

代码

protected string text;//注意这里必须申明为public或protected,否则aspx页面(子类)无法访问
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.text = "aaaaaaaaaaaaa";
this.TextBox1.DataBind();//或this.DataBind();
}
}

三. <%=%>
这种格式经常用到的。 

<label ><%=DisplayStr()%></label><br />
<label runat="server"><%=DisplayStr()%></label>

aspx.cs代码:

public string DisplayStr()//注意这里必须要有返回值,否则将会发生运行时错误
{
return "bbbb";
}

四.<%$%>
主要用于引用外部资源
特别注意:1.绑定的只能是服务器控件
2.只能绑定到服务器控件的某个属性上。
以下以获取web.config资源来做实例:

代码

<asp:TextBox runat="server" ID="cc" Text="<%$ConnectionStrings:pubs%>"></asp:TextBox>
web.config文件如下:
<connectionStrings><add name="pubs" c providerName="System.Data.SqlClient"/></connectionStrings>

这样就能正常运行。
如果修改aspx中的文件:使用客户端的控件
<input type="text" value="<%$ConnectionStrings:pubs%>"/>
或者:不绑定到服务器控件的某个属性上
<asp:TextBox runat="server" ID="cc"><%$ConnectionStrings:pubs%></asp:TextBox>
运行都会出现相同的错误:
"分析器错误信息:不允许使用类似"<%$ConnectionStrings:pubs%>"类似的文本表达式,请改用……

最后强调:
<%#%>只针对的是服务器控件的数据绑定,因此不能同<%=%>和<%%>混合使用

ASP.NET 2.x,3.x: <%#Eval("数据库字段名","格式化表达式")%> 或<%#Eval("数据库字段名")%>
追问:
那个 eval 到底是干什么的呀。它是什么意思呀。在asp.net 中有什么作用?
回答:
你说的你“只会死记硬背”,你就死记硬背好了,这个问题不是几句说得明白的,我带的一些工程师写了几年代码都没搞清楚。。。

简单跟你说就是在1.x里绑定是通过一个DataBinder类的静态方法来进行,并且微软在控件里面做了个局部的变量Container,指向该位置的所属控件(就是数据控件的这一行的行对象),以此实现绑定
在2.x里面微软在模板控件类里面实现了一个Eval方法用来绑定数据,里面的实现很巧妙也很有意思,建议你如果有兴趣有精力可以研究一下这个设计,因为模板控件类的这个方法的实现使绑定语法变得更简单。 因为页面Page类也是模板控件的子类,所以子类可以调用父类里的公共方法Eval来绑定。

简单就这么说了



ASP.NET 网页中的嵌入式代码块,布布扣,bubuko.com

时间: 07-26

ASP.NET 网页中的嵌入式代码块的相关文章

在UIWebView中间接调用网页中的javascript代码获得想要的值

日记和一些废话: 今天在使用webView加载网页后, 发现网页中的点击事件是用js代码实现的, 可是怎么点击都没有反应, 而且我主要是想获取到点击事件转到的url , 后来发现html中又这么一段代码: document.addEventListener('WebViewJavascriptBridgeReady', function onBridgeReady(event) function openPage(pageUrl) { if(bridge) { bridge.send(pageU

利用Google Chrome开发插件,在网页中植入js代码

Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的脚本采集程序,需要测试在网页中的运行情况,因此可以利用Chrome插件进行测试. 1.首先第一步是新建一个文件夹,并新建一个manifest.json文件,内容如下 { "manifest_version": 2, "name": "Js implants&q

关于Java中的静态代码块

一.静态代码块 ①特点:随着类的加载而执行,且只执行一次,不管创建了多少次对象实例,这个类中的静态代码块只会在第一次创建类实例或者直接使用类名调用静态方法时执行一次,且若第一次是使用类名调用静态方法,则会先执行静态代码块后才会执行相应方法.(这也说明创建类实例或者使用类名调用静态方法时,类都会被加载进内存).如果是StaticCode s=null;这样的声明语句,类是不会被加载入内存中的. ②功能:用于给类初始化(不是对象) 二.静态方法:①若只是创建含有静态方法的类的对象而没有调用静态方法,

在网页中显示html代码

string str = "<div>aaa</div>"; this.Literal1.Text = string.Format("<pre>{0}</pre>", str.Replace("<", "<").Replace(">", ">")); string str = "<div>中国&

java中的静态代码块、构造代码块、普通代码块和同步代码块总结

java中的4中代码块总结如下: * 加了static的是静态代码块,在类中写了一对{}是构造代码块,在方法中写了一对{}是普通代码块, * java中还有一种代码块是同步代码块,常用在多线程中, synchronized关键字, * 同步代码块格式是:synchronized(同步对象){} * 静态代码块 先于构造代码块 先于构造方法执行 * 静态代码块 先于普通代码块 先于构造方法执行 * 构造代码块和普通代码块按照程序逻辑顺序执行 package 面试题; class HelloA{ p

java中c#中statc 静态调用不同之处、c#的静态构造函数和java中的构造代码块、静态代码块

1.java和c#静态成员调用的不同之处 static 表示静态的,也就是共享资源,它是在类加载的时候就创建了 java中   可以通过实例来调用,也可以通过类名.成员名来调用,但是一般最好使用类名.成员这个方式,因为静态成员是属于类的,并不是属于具体的对象 c#中     只能通过类名.成员调用,并不能 用实例来进行调用 2.c#的静态构造函数和java中的构造代码块.静态代码块 c# 静态构造函数的特点:        1)静态构造函数不需要手动调用,系统自动调用        2)静态构造

java中的静态代码块,构造代码块,构造函数,普通代码块

java中的静态代码块,构造代码块,构造函数,普通代码块 静态代码块: 格式: public class Test1{ static{ System.out.println("这是一个静态代码块");  } } 说明: 1.静态代码块在类加载时也就是项目启动时运行并且只运行一次相当于main函数,有多个静态代码块从上往下依次执行,他是一种主动运行的机制. 2.静态代码块不能存在于任何方法中 构造代码块 格式: public class Test2{ { System.out.print

Asp.net网页中禁止使用剪切、复制、粘贴的方法

工欲善其事,必先利其器 在asp.net开发的网页中,有时候需要禁止用户粘贴复制密码,禁止用户copy文章直接粘贴到文本框中.采取的方法是直接在限制控件的地方写上禁止粘贴文本的代码.但是这样不是很方便,假如一个页面中有5个textbox的控件,这时候必须单独对每一个控件都写上禁止复制.粘贴的代码,导致工作量很大.那下面来看看具体操作. 第一步,新建一个空的webform页面. 第二步,在webform中添加几个textbox控件. 第三步,在body标签中加入 oncut="return fal

在 ASP.NET 网页中不经过回发而实现客户端回调

一.使用回调函数的好处 在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作.此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器.但是,在有些情况下,需要从客户端运行服务器代码,而不执行回发.如果页中的客户端脚本维护一些状态信息(例如,局部变量值),那么发送页和获取页的新副本就会损坏该状态.此外,页回发会导致处理开销,这会降低性能,且会让用户不得不等待处理并重新创建页. 若要避免丢失客户端状态并且不导致服务器往返的处理开销,可以对