ASP.NET教程之ASP 2.0 数据绑定函数Eval()的机制
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。函数|数据 本文假定你已懂得ASP1.1的数据绑定(出格是Container这个部分变量)的机制,这里次要剖析ASP2.0数据绑定做了那些改善。ASP.NET2.0的数据绑定函数Eval()简化失落了ASP1.1奥秘的Container.DataItem,好比数据绑定表达式:
<%#(Container.DataItemasDataRowView)["ProductName"].ToString()%>
ASP1.1简化为:(往失落了范例指定,Eval经由过程反射完成,本文不再论述)
<%#DataBinder.Eval(Container.DataItem,"ProductName").ToString()%>
ASP2.0又简化为,往失落了Container部分变量:
<%#Eval("ProductName")%>
那末,Page.Eval()又是怎样晓得"ProductName"是谁人数据的属性呢,即Container.DataItem真的消散了吗?
Eval()是Page的父类TemplateControl的办法
TemplateControl.Eval()能够主动盘算出Container,机制就是从一个dataBindingContext:Stack仓库来猎取。
1.创建DataItemContainer栈:
在Control.DataBind()中,创建,如许能够包管子控件的DataItemContainer一直在栈顶。
publicclassControl
{
protectedvirtualvoidDataBind(boolraiseOnDataBinding)
{
boolfoundDataItem=false;
if(this.IsBindingContainer)
{
objecto=DataBinder.GetDataItem(this,outfoundDataItem);
if(foundDataItem)
Page.PushDataItemContext(o);<--将DataItem压进仓库
}
try
{
if(raiseOnDataBinding)
OnDataBinding(EventArgs.Empty);
DataBindChildren();<--绑定子控件
}
finally
{
if(foundDataItem)
Page.PopDataItemContext();<--将DataItem弹出仓库
}
}
}
2.猎取DataItemContainer
publicclassPage
{
publicobjectGetDataItem()
{
...
returnthis._dataBindingContext.Peek();<--读取仓库顶部的DataItemContainer,就是正在绑定的DataItem Container
}
}
3.TemplateControl.Eval()
publicclassTemplateControl
{
protectedstringEval(stringexpression,stringformat)
{
returnDataBinder.Eval(Page.GetDataItem(),expression,format);
}
}
结论:
从下面看出Page.Eval()在盘算的时分仍是援用了Container.DataItem,只不外这个DataItem经由过程DataItemContainer仓库主动盘算出来的。我以为Page.Eval()看似把成绩简化了,实在把成绩弄得加倍奥秘。我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:) 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
页:
[1]