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

ASP.NET 資料綁定 Eval 與 Bind 差異全解析

     編輯:ASP.NET 基礎

Eval(單向綁定)與 Bind(雙向綁定)是 ASP.NET 資料綁定語法的核心,正確選擇直接影響資料回寫成敗。

核心差異

特性Eval (單向)Bind (雙向)
方向資料源 → 介面資料源 ↔ 介面
原理反射讀取屬性反射讀取 + 解析賦值語句
適用場景唯讀顯示、Label、Literal、GridView 唯讀欄可編輯欄位、TextBox、DropDownList、CheckBox、GridView/DetailsView/FormView 編輯/插入模板
語法<%# Eval("Field") %><%# Bind("Field") %>
格式化<%# Eval("Date", "{0:yyyy-MM-dd}") %><%# Bind("Date", "{0:yyyy-MM-dd}") %>
導航 URL<%# Eval("Id", "Detail.aspx?id={0}") %>不支援複雜格式字串

Eval 詳細用法

<!-- 一般綁定 -->
<%# Eval("ProductName") %>

<!-- 日期格式化 -->
<%# Eval("CreateDate", "{0:yyyy-MM-dd HH:mm}") %>

<!-- 超鏈接構建 -->
<a href='<%# Eval("Id", "ProductDetail.aspx?id={0}") %>'>詳情</a>

<!-- 多欄位組合 -->
<%# string.Format("{0} - {1}", Eval("FirstName"), Eval("LastName")) %>

Bind 詳細用法

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" OnRowUpdating="gv_RowUpdating">
  <Columns>
    <asp:TemplateField HeaderText="產品">
      <ItemTemplate><%# Eval("Name") %></ItemTemplate>
      <EditItemTemplate>
        <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Name") %>' />
      </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="價格">
      <ItemTemplate><%# Eval("Price", "{0:C}") %></ItemTemplate>
      <EditItemTemplate>
        <asp:TextBox ID="txtPrice" runat="server" Text='<%# Bind("Price", "{0:F2}") %>' />
      </EditItemTemplate>
    </asp:TemplateField>
    <asp:CommandField ShowEditButton="True" />
  </Columns>
</asp:GridView>

編輯模式下,點擊「更新」時,GridView 會自動解析所有 Bind 表達式,將控件值回寫至資料源物件對應屬性,再觸發 RowUpdating 事件。

常見錯誤與避坑

  • 唯讀欄位用 Bind:導致回寫失敗或例外,改用 Eval。
  • 可編輯欄位用 Eval:更新時該欄位值不會回寫,資料不更新。
  • Bind 格式化字串過複雜:解析器可能失敗,僅支援 {0:format} 簡單格式。
  • 資料源為匿名類型/動態物件:Bind 需具體屬性 setter,匿名類型不可寫,需用具體類別或 DataTable。
  • DataKeyNames 未設:GridView/DetailsView 需主鍵識別更新行,否則 Bind 回寫無效。

進階:單向綁定也要格式化輸入?

若需在唯讀模式下顯示格式化,但在編輯模式下輸入原始值,可在 EditItemTemplate 用 Bind,ItemTemplate 用 Eval 搭配格式化。

總結口訣

「只看不改用 Eval,要改回寫用 Bind;格式化雙方都支援,複雜導航 Eval 專用。」

熟練掌握兩者差異,是 ASP.NET WebForms 高效開發資料驅動頁面的關鍵。

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