仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 674|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP 2.0 数据绑定函数Eval()的机制

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:41:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。函数|数据  本文假定你已懂得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性能非常的稳定,版本也会定期的更新,目前他的
莫相离 该用户已被删除
5#
发表于 2015-2-11 09:26:27 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-2 08:57:37 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
简单生活 该用户已被删除
7#
发表于 2015-3-11 02:51:17 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-17 19:10:56 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-24 21:37:59 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 18:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表