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>
[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;
}
BuildTemplateMethod:負責渲染編輯介面(含 Bind 運算式)。ExtractTemplateValuesMethod:負責從使用者輸入控件**擷取值**回傳給 DataSourceControl,實現「雙向」。這雙方法分離的設計,讓 ASP.NET 在 PostBack 時能自動收集模板中所有 Bind 綁定控件的值,無需開發者手動遍歷。下篇將詳細剖析 ExtractTemplateValuesMethod 的實作細節。