Author: Walkdan (walkdan(at)gmail.com) ASP.NET 2.0 的Eval()简化了掉了ASP 1.1 Container.DataItem,比如: <%# (Container.DataItem as DataRowView)[“ProductName”].ToString() %> 简化为:(去掉了类型指定 ASP 1.1, Eval通过反射实现,本文不再阐述) 又简化为(ASP 2.0): 2. 获取DataItem Container
<%# DataBinder.Eval(Container.DataItem, “ProductName”).ToString() %>
<%# Eval(“ProductName”) %>
Eval()是TemplateControl:Page 的方法
TemplateControl.Eval()可以自动计算出Container, 机制就是从一个dataBindingContext:Stack堆栈来获取。
1. 建立DataItem Container 栈:
在Control.DataBind()中,建立,这样可以保证子控件的DataItem Container始终在栈顶。
public class Control
{
protected virtual void DataBind(bool raiseOnDataBinding)
{
bool foundDataItem = false;
if (this.IsBindingContainer)
{
object o = DataBinder.GetDataItem(this, out foundDataItem);
if (foundDataItem)
Page.PushDataItemContext(o); <– 将DataItem压入堆栈
}
try
{
if (raiseOnDataBinding)
OnDataBinding(EventArgs.Empty);
DataBindChildren(); <– 绑定子控件
}
finally
{
if (foundDataItem)
Page.PopDataItemContext(); <– 将DataItem弹出堆栈
}
}
}
public class Page
{
public object GetDataItem()
{
…
return this._dataBindingContext.Peek(); <– 读取堆栈顶部的DataItem Container,就是正在绑定的DataItem Container
}
}
3. TemplateContro.Eval()
public class TemplateControl
{
protected string Eval (string expression, string format)
{
return DataBinder.Eval (Page.GetDataItem(), expression, format);
}
}
asp 2.0 数据绑定函数eval()的机制_asp.net技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp 2.0 数据绑定函数eval()的机制_asp.net技巧
相关推荐
-      对.net framework 反射的反思_asp.net技巧
-      .net3.5和vs2008中的asp.net ajax_asp.net技巧
-      使用asp.net ajax框架扩展html map控件_asp.net技巧
-      asp.net应用程序资源访问安全模型_asp.net技巧
-      photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
-      photoshop通道结合图层模式抠狗尾巴草_photoshop教程
-      web.config详解+asp.net优化_asp.net技巧
-      asp.net中多彩下拉框的实现_asp.net技巧