我想我会问这个问题,看看为什么许多示例和人们更喜欢在 aspx 代码中使用内联数据绑定而不是在使用 WebForms 时实现 OnDataBinding 事件。
对于任何数据绑定控件(例如,Repeater、GridView 等),如果我需要执行任何不是开箱即用的内置操作(例如,我需要执行 Eval),我总是为字段级控件实现 OnDataBinding 方法。我看到的大多数示例都使用内联 <%# 语法在 aspx 页面中使用代码。
内联 ASP.NET 代码示例:
<asp:Literal ID="litExample" runat="server"
Text='<%# Eval("ExampleField").ToString() %>' />
我喜欢如何做的例子:
在 aspx 中:
<asp:Literal ID="litExample" runat="server"
OnDataBinding="litExample_DataBinding" />
在代码隐藏 .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 事件吗?