单向数据绑定Eval
函数属于DataBinder
类,并且可以在页面通过TemplateControl.Eval
方法中访问,该方法调用该DataBinder.Eval
方法使用该GetDataItem
方法来解析评估表达式的对象引用,唷!
好的......那么,双向数据绑定Bind
功能如何工作?它属于哪个类?
单向数据绑定Eval
函数属于DataBinder
类,并且可以在页面通过TemplateControl.Eval
方法中访问,该方法调用该DataBinder.Eval
方法使用该GetDataItem
方法来解析评估表达式的对象引用,唷!
好的......那么,双向数据绑定Bind
功能如何工作?它属于哪个类?
我想说,Bind() 方法无处可寻,即使使用 Reflector。
---对于诸如 TextBoxes(也称为“双向数据绑定”)之类的读写值,您可以使用 Bind() 语句。Bind() 语句从何而来?
具体来说,ASP.NET 中没有绑定方法!当 ASP.NET 解析您的文件并看到您正在使用databinding expression
(in the angle-bracket-percent-pound format, "<%# %>")
它时,它具有特殊情况代码来解析 Bind 语法并为其生成一些特殊代码。当您使用<%# Bind("Name") %>
它时,它不是真正的函数调用。
如果 ASP.NET 分析代码并检测到 Bind() 语句,它会将语句分成两部分。第一部分是单向数据绑定部分,最终只是一个常规的 Eval() 调用。第二部分是反向部分,它通常是一些代码,"string name = TextBox1.Text"
可以从绑定的位置获取值。
Non-Bind() 数据绑定语句是文字代码(我们在 CodeDom 中使用 CodeSnippetExpressions),因此允许使用您选择的语言的任意代码。但是,因为 ASP.NET 必须解析 Bind() 语句,所以双向数据绑定不支持除 Bind() 之外的任何内容。例如,以下语法是无效的,因为它试图调用任意代码并同时使用 Bind():<%# FormatNameHelper(Bind("Name")) %>
双向数据绑定中支持的唯一格式是 Bind("field") 和 Bind("field", "format string {0}")。这些语法示例有一些非常小的变化,例如允许使用单引号而不仅仅是双引号。由于 ASP.NET 支持的某些语言支持一种格式而不是另一种格式,因此我们必须同时支持这两种格式,即使您使用的语言可能只支持一种格式。
据我所知,“绑定”不是一种方法,而是一种语言结构。
来源和进一步阅读:http ://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx