首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

深入 ASP.NET 資料繫結(中)——資料雙向繫結機理

     編輯:關於ASP.NET

Bind 語法與雙向繫結的動態編譯揭秘

Bind 不同於 Eval 的關鍵字本質

Bind 並非 Page 或 TemplateControl 的方法,而是編譯器辨識的關鍵字。ASP.NET 動態編譯頁面時,會將 <%# Bind("欄位") %> 轉換為特定程式碼結構,並產生委派以達成雙向資料流。

範例頁面片段

<asp:DetailsView ID="detailsView" runat="server" DefaultMode="Edit" DataSourceID="DetailsDataSouce1">
  <Fields>
    <asp:TemplateField>
      <EditItemTemplate>
        <asp:TextBox ID="textBox1" runat="server" Text='<%# Bind("[電流{a}]") %>'></asp:TextBox>
      </EditItemTemplate>
    </asp:TemplateField>
  </Fields>
</asp:DetailsView>

動態編譯產生的 TemplateField 建構程式碼

[DebuggerNonUserCode]
private TemplateField __BuildControl__control5()
{
    TemplateField field = new TemplateField();
    field.HeaderTemplate = new CompiledTemplateBuilder(new BuildTemplateMethod(this.__BuildControl__control6));
    field.EditItemTemplate = new CompiledBindableTemplateBuilder(
        new BuildTemplateMethod(this.__BuildControl__control7),
        new ExtractTemplateValuesMethod(this.__ExtractValues__control7));
    return field;
}

關鍵差異:CompiledBindableTemplateBuilder

  • BuildTemplateMethod:負責渲染編輯介面(含 Bind 運算式)。
  • ExtractTemplateValuesMethod:負責從使用者輸入控件**擷取值**回傳給 DataSourceControl,實現「雙向」。

這雙方法分離的設計,讓 ASP.NET 在 PostBack 時能自動收集模板中所有 Bind 綁定控件的值,無需開發者手動遍歷。下篇將詳細剖析 ExtractTemplateValuesMethod 的實作細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved