揭秘ASP.NET 2.0的Eval方法
来源:http://www.pccode.net/info/2010/01/25/20100125-1220.html
实际上Eval方法是TemplateControl的,而System.Web.UI.Page和System.Web.UI.UserControl都继承于TemplateControl,所以我们可以在Page和UserControl上直接调用个方法。
Page.Eval方法可以帮助我们更好的撰写数据绑定表达式,在ASP.NET 1.x时代,数据绑定表达式的一般形式是:
<%# DataBinder.Eval(Container,“DataItem.Name”) %>
而在ASP.NET 2.0中,同样的代码,我们可以这样写:
<%# Eval(“Name”)%>
ASP.NET 2.0是怎么实现的呢?我们先从Eval方法来研究,通过反射.NET fromwork 2.0类库的源代码,我们可以看到这个方法是这样实现的:
protected internal object Eval(string expression)
{
this.CheckPageExists();
return DataBinder.Eval(this.Page.GetDataItem(), expression);
}
第一行我们不必管,这是检查调用的时候有没有Page对象的,如果没有则会抛出一个异常。 关键是第二行:
return DataBinder.Eval(this.Page.GetDataItem(), expression);
Page.GetDataItem()也是2.0中新增的一个方法,用途是正是取代ASP.NET 1.x中的Container.DataItem。
看来不摸清楚GetDataItem()方法,我们也很难明白Eval的原理。GetDataItem的实现也很简单:
public object GetDataItem()
{
if ((this._dataBindingContext == null) || (this._dataBindingContext.Count == 0))
{
&nbs
相关文档:
需求:
A域有页面a.html,其中有iframe包含B域的页面b.html,现在要通过a.html上的一个按钮,来把a.html页面上一个文本框的值传递到b.html页面的文本框。
注:这里b.html是html网页,不能接收其他网站post过来的值,所以不能用直接post的方法来传值,但是,如果接收页面是b.aspx或者b.asp 呢,那不是可以直接post了么?答 ......
这里是从Dataset里的数据生成曲线图.
我的Dataset是从表Sendrec里读取的数据,分别有Id,Sendid(订单号),Sendtime(记录时间),Sendnum(单位时间发送量/我这里是五分钟)几个字段
过程如下:
public void draw(Page page,DataSet ds,int Tnum){}
其中page是用来传递引用这个过程的页面,这样让页面是JPG方式直接向客户端输出生 ......
Javascript 在ASP.net 母板页下访问 控件ID:
对于 html control : 直接访问ID
document.getElementById("hfRespondID");
对于 Web control :
document.getElementById("<%= this.hfRespondID.ClientID %>") [注意大小写
]
&nb ......
关闭窗体
1.
this.btnClose.Attributes.Add("onclick", "window.close();return false;");
2.关闭本窗体间跳转到另一个页面
this.HyperLink1.NavigateUrl = "javascript:onclick=window.opener.location.assign
......