蒙在股里 发表于 2015-1-16 22:41:37

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好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)

深爱那片海 发表于 2015-1-19 21:17:46

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

不帅 发表于 2015-1-27 20:37:10

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

仓酷云 发表于 2015-2-5 10:48:09

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的

莫相离 发表于 2015-2-11 09:26:27

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。

金色的骷髅 发表于 2015-3-2 08:57:37

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

简单生活 发表于 2015-3-11 02:51:17

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

精灵巫婆 发表于 2015-3-17 19:10:56

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

灵魂腐蚀 发表于 2015-3-24 21:37:59

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
页: [1]
查看完整版本: ASP.NET教程之ASP 2.0 数据绑定函数Eval()的机制