c# – OnDataBinding vs Inline:优缺点和开销
我以为我会问这个问题,看看为什么很多例子和人们喜欢在aspx代码中使用内联数据绑定,而在使用WebForms时实现OnDataBinding事件.
对于任何数据绑定控件(例如Repeater,GridView等),如果我需要做任何不是开箱即用的东西(例如,我需要做一个Eval),我总是为Field级别的控件实现OnDataBinding方法.我看到的大多数示例都使用内联<%#语法在aspx页面中使用代码. 内联ASP.NET代码示例: <asp:Literal ID="litExample" runat="server" Text='<%# Eval("ExampleField").ToString() %>' /> 我如何喜欢这样做的例子: 在aspx中: <asp:Literal ID="litExample" runat="server" OnDataBinding="litExample_DataBinding" /> 在codebehind .cs: protected void litExample_DataBinding(object sender,System.EventArgs e) { Literal lit = (Literal)(sender); lit.Text = string.Format("{1} - {2}",Eval("ExampleField").ToString(),Eval("ExampleField2").ToString()); } 我个人更喜欢codebehind方法,因为它保持我的aspx页面清洁,我没有所有的这个内置的代码遍布整个地方,下一个人只是知道总是在.cs文件中查看代码更改.演示和代码的分离也以这种方式保持更好,因为HTML只是占位符,代码绑定正在确定实际被控制的内容. 现在这些是非常基本的例子.该字段可以是您要使用前导0或需要特定格式的DateTime进行格式化的整数.还可以使用所有类型的操作和代码来获取应存储在“文本”属性中的最终值结束. 如果您使用内联代码,您在哪里画线并将其移动到代码隐藏? 这样做的优点和缺点是什么? 一个比另外一个需要更多的开销? 编辑注意:我不是在将一个值分配给一个刚刚在页面上的控件,而是一个数据绑定的控件,因为它存在于一个中继器模板或gridview项目模板等中.显然,一个文字坐在一个页面上可以在代码中分配. 编辑注意:我以为我会收集更多的回应,特别是在开销上.大多数人不会使用OnDataBinding事件? 解决方法
他们之间的性能差异很小.数据绑定表达式被解析并编译成类似的东西
control.DataBinding += new EventHandler(ControlDataBinding); 并且 private void ControlDataBinding(object sender,EventArgs e) { control.Text = Eval("Field"); } 在这种情况下,OnDataBinding方法不会被覆盖.执行基本的Control.OnDataBinding方法,这引发了DataBinding事件,导致上述代码执行. 当您重写OnDataBinding时,您只需要在运行基础代码之前接管,并自己设置Text属性(例如). 我不喜欢提供部分答案,但我会这样做,因为我认为它很整洁,最近救了我: 我说数据绑定表达式被解析.事实上,所有的标记都被解析,C#中的代码,VB.NET或者任何一种语言被生成,这被编译成一个类.当请求页面时,将创建此类的实例,并开始生效. 你可以在磁盘上找到这些生成的代码文件对不起,我不记得在哪里了.他们的有趣的事情是,他们仍然工作,作为代码. 例如,我最近有一些相当复杂的Infragistics网格设置,所有格式完成,然后发现我需要能够设置rumtime的格式(以获得正确的格式到导出的Excel文件).为了做到这一点,我打开了源文件(所有网格都在一个用户控件中),并且能够将每个网格的配置提取到一组单独的方法中. 我可以用ReSharper清理它们,将常见的代码序列提取到一个基类中,并留下一个静态方法来设置每个网格.然后我可以调用它们进行初始设置,以及用于Excel导出的虚拟网格的设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |