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

ASP.NET Repeater 巢狀綁定 Dictionary 資料來源:完整範例與常見錯誤排解

     編輯:ASP.NET 基礎

應用場景

需呈現「分類 → 項目清單」的兩層結構,資料來源為 Dictionary<int, List<User>>,Key 為分類 ID,Value 為該分類下的使用者清單。使用巢狀 Repeater 實現無分頁、純渲染的高效能列表。

.aspx 頁面標記

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
    <%# ((KeyValuePair<int, List<User>>)Container.DataItem).Key %> <br />

    <asp:Repeater ID="Repeater2" runat="server"
        DataSource='<%# ((KeyValuePair<int, List<User>>)Container.DataItem).Value %>'>
      <ItemTemplate>
        <%# ((User)Container.DataItem).Id %> - <%# ((User)Container.DataItem).Name %><br />
      </ItemTemplate>
    </asp:Repeater>
    <hr />
  </ItemTemplate>
</asp:Repeater>

.aspx.cs 後端程式碼

public partial class Temp : System.Web.UI.Page
{
    private readonly Dictionary<int, List<User>> _dict = new Dictionary<int, List<User>>();

    protected void Page_Load(object sender, EventArgs e)
    {
        _dict.Add(1, new List<User> { new User { Id = 1, Name = "aa" }, new User { Id = 2, Name = "bb" } });
        _dict.Add(2, new List<User> { new User { Id = 3, Name = "cc" }, new User { Id = 4, Name = "dd" } });

        Repeater1.DataSource = _dict;
        Repeater1.DataBind();
    }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

關鍵技術點

  • 外層 Repeater 直接綁定 Dictionary,Container.DataItem 型別為 KeyValuePair<TKey, TValue>。
  • 內層 Repeater 的 DataSource 使用內嵌運算式 `<%# ... %>` 取得 .Value(即 List<User>),自動實作 IEnumerable 介面,滿足資料來源需求。
  • 型別轉換:使用 `((KeyValuePair<...>)Container.DataItem)` 明確轉型,避免晚期繫結效能損耗。

常見錯誤:

「Repeater 使用的是無效資料來源。有效資料來源必須實作 IListSource 或 IEnumerable」

原因與解決

錯誤情況說明修正
直接綁定單一物件(非集合)如 User、string、int包裝為 new List<User> { user } 或 new[] { user }
綁定 DataTable / DataSet 未指定 DefaultView舊版需 dt.DefaultView改用 dt.AsEnumerable() 或確認已實作 IListSource
巢狀 Repeater DataSource 運算式語法錯誤缺少單引號或轉型錯誤參考本文範例:DataSource='<%# ((KeyValuePair<...>)Container.DataItem).Value %>'

效能提示

  • Dictionary 適合「Key 唯一、需快速查找」場景;若需保留插入順序,改用 SortedDictionary 或 List<KeyValuePair>。
  • 大量資料建議啟用 ViewStateMode="Disabled" 並搭配輸出快取。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved