|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。<p>ASP.NETEval在数据绑定方面的使用是尽人皆知的,不外手艺在开展,当ASP.NETEval1.1酿成ASP.NETEval2.0的时分,在操纵的时分会有甚么变更呢?
假定你已懂得ASP.NETEval1.1的数据绑定(出格是Container这个部分变量)的机制,这里次要剖析ASP.NETEval2.0数据绑定做了那些改善。
ASP.NETEval2.0的数据绑定函数Eval()简化失落了ASP.NETEval1.1奥秘的Container.DataItem,好比数据绑定表达式:
<OLclass=dp-c><%#(Container.DataItemasDataRowView)["ProductName"].ToString()%>
ASP.NETEval1.1简化为:(往失落了范例指定,Eval经由过程反射完成,本文不再论述)
<OLclass=dp-c><%#DataBinder.Eval(Container.DataItem,"ProductName").ToString()%>
ASP.NETEval2.0又简化为,往失落了Container部分变量:
<OLclass=dp-c><%#Eval("ProductName")%>
那末,Page.Eval()又是怎样晓得"ProductName"是谁人数据的属性呢,即Container.DataItem真的消散了吗?
ASP.NETEval()是Page的父类TemplateControl的办法
TemplateControl.Eval()能够主动盘算出Container,机制就是从一个dataBindingContext:Stack仓库来猎取。
1.创建DataItemContainer栈:
在Control.DataBind()中,创建,如许能够包管子控件的DataItemContainer一直在栈顶。
<OLclass=dp-c>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
<OLclass=dp-c>publicclassPage{ publicobjectGetDataItem() {...returnthis._dataBindingContext.Peek();<--读取仓库顶部的DataItemContainer,就是正在绑定的DataItem Container }}
3.TemplateControl.Eval()
<OLclass=dp-c>publicclassTemplateControl{ protectedstringEval(stringexpression,stringformat) {returnDataBinder.Eval(Page.GetDataItem(),expression,format); }}
结论:
从下面看出Page.Eval()在盘算的时分仍是援用了Container.DataItem,只不外这个DataItem经由过程DataItemContainer仓库主动盘算出来的。我以为Page.Eval()看似把成绩简化了,实在把成绩弄得加倍奥秘。
<p>呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。 |
|