嵌入式代码-表达式
嵌入式代码块是在呈现页面的过程中执行的服务器代码。块中的代码可以执行编程语句,并调用当前页类中的函数。
解析表达式
在嵌入式代码块中,语法 <% = expression %> 用于解析表达式,并将其值返回到块中。
嵌入式代码块必须使用页的默认语言进行编写。例如,如果页的 @Page 指令包含特性 language="VB",则页将使用 Visual Basic 编译器对标有 runat="server" 的所有脚本块中的代码以及 <% %> 分隔符中的所有内嵌代码进行编译。
由于代码仅在呈现页的过程中执行,因此与将代码置于适当的页处理阶段以执行后台代码或脚本块代码相比,其灵活性大大降低。
解析表达式之数据绑定
数据绑定使用标签<%# expression %>,将expression的值赋值给控件。DataBind方法是Control基类的一个方法,所以所有控件都具有该方法,且控件的DataBind方法被调用后,控件内所有子控件的DataBind方法也会被调用。数据绑定的重要特征是可以控制数据表达式何时求值。如果Page页或者绑定控件的DataBind()方法不被调用,赋值将永远不会产生。
对比表达式
<% = expression %>解析表达式,不能用于Server端控件的属性上,在WEB页面呈现时被调用,且无法控制赋值时间。
<%# expression %>解析表达式,用于绑定控件属性(可以非Server端控件),在调用控件的DataBind方法后执行绑定。
对比示例代码,第一个<p>段落标签采用数据绑定,分别针对服务器端控件和非服务器端标签,如果Page_Load内的DataBind方法注释掉,那么第一个<p>标签内的数据绑定将永远不会执行。第二个<p>段落标签内的表达式求值,同样是调用了服务器端的自建方法和类库方法,总是在页面呈现时调用,且不能控制绑定时间。
其他:
这个示例在ASP.NET4.0环境测试,去掉了CodeBehind和 Inherits,返璞归真,对于测试来说,简洁实用。