【问题标题】:The databind bind() function belongs to which class?数据绑定 bind() 函数属于哪个类?
【发布时间】:2011-10-23 21:53:16
【问题描述】:

单向数据绑定Eval函数属于DataBinder类,可以通过TemplateControl.Eval方法在页面中访问,该方法调用DataBinder.Eval方法,使用GetDataItem方法解析对象引用表达式被评估,呸!

好的...那么,双向数据绑定Bind 函数是如何工作的?属于哪一类?

【问题讨论】:

    标签: c# asp.net data-binding 2-way-object-databinding


    【解决方案1】:

    据我所知,“绑定”不是一种方法,而是一种语言结构。
    来源及延伸阅读:http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx

    【讨论】:

    • 奇怪的是我没有找到任何有用的文章。非常感谢。
    【解决方案2】:

    我想说,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 支持的某些语言偏爱一种格式而不是另一种格式,因此我们必须同时支持这两种格式,即使您使用的语言可能只支持一种格式。

    【讨论】:

    • 谢谢,但您的回答与@Svarog 发送的链接内容完全相同。
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多