日期:2014-05-17  浏览次数:20457 次

发个贴。问下<%=%>和<%#%>分别代表什么意思。
纠结了。
分别代表什么意思呢?

------解决方案--------------------
使用<%# %>,这用在服务器控件的属性中。凡是有这个表达式的,它被编译到服务器控件的响应 DataBinding 事件的方法中。例如你写
<asp:Label runat="server" ID="aaa" Text="<%# GetMM() %>" />
这个Text属性代码其实并不在aaa的初始化中,而是被编译器的自动代码生成机制生成为类似这样的方法
void aaa_OnDataBinding(object sender, EventArgs e)
{
    aaa.Text= GetMM();
}
并且把这个方法注册给aaa的DataBinding事件。实际上,你自己写代码也这样写,而使用<%# %>这个表达式你就可以在设计代码中很干净简练地随时设置和维护数据绑定的规则,而不用跟后台代码放在一起。

所有的 System.Web.UI.Control(以及其子类)对象都支持DataBind()方法,而上述Label就是这样实现它的,当你调用aaa.DataBind(),这个事件就被触发了,于是GetMM方法就开始计算并将结果设置给aaa.Text了。

在我们的数据绑定控件的模板中,你可能经常使用数据绑定表达式,当数据绑定控件的DataBind()方法被执行时,控件内部所有子控件也被递归地执行DataBind()方法,asp.net已经为所有绑定表达式生成了类似上述代码,包括(如你写的)调用Eval或者Bind方法的代码,并且asp.net会自动为数据绑定控件每一行设置了Container对象,而Eval或者Bind就会自动从Container中获取数据或者设置数据。

所以你可以通过调用控件的 DataBind()方法,随时让绑定表达式开始计算(或者重算)。