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

深入 ASP.NET 資料繫結(下)——多樣的繫結方式

     編輯:關於ASP.NET

特殊欄位名稱的資料繫結陷阱與解決方案

前兩篇分析了單向與雙向繫結的內部機制,本篇分享實務上常見的特殊欄位名稱問題。

問題現象

資料庫欄位名稱若包含 (、)、[、] 等字元,在 <%# Eval("欄位名") %> 中直接使用會報錯。以「電壓(V)」為例:

<%# Eval("電壓(V)") %>

執行時錯誤:DataBinding: "System.Data.DataRowView" 不包含名為 "電壓" 的屬性。

嘗試加上方括號 <%# Eval("[電壓(V)]") %> 仍失敗:電壓(V 既不是表 DataTable1 的 DataColumn 也不是 DataRelation。

為何 GridView 自動產生欄位卻正常?

GridView 內部並非使用 DataBinder.Eval,而是有自己的取值邏輯,因此能正確處理特殊字元。

根本原因分析

DataBinder.Eval 內部透過 DataBinder.GetPropertyValue 解析運算式,其剖析器將 ( ) [ ] 視為運算子而非欄位名稱一部分,導致解析錯誤。

解決方案

  1. 避免特殊字元: 資料庫設計階段命名規範化。
  2. 使用索引器語法: <%# Eval("[電壓(V)]") %> 在某些版本可行,但不穩定。
  3. 自訂繫結運算式: 繼承 DataBinder 或使用 DataRowView["欄位名"] 直接存取。
  4. View 層轉換: 在資料源層將特殊欄位重新命名為合法識別碼。

深入理解繫結剖析器行為,才能在遇到特殊命名時靈活因應,避免運行時驚喜。

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