2012-09-12 22 views
0

我有一個名爲「Entries」的表,並且正在使用LINQ to SQL進行數據訪問。我創建了一個獲取所有條目的存儲過程。我已經將存儲的proc映射到數據上下文中的方法,我已將返回類型設置爲「Entry」。'object'在ascx文件中不包含使用repeater的定義錯誤

我在我的數據訪問類中創建了一個方法,它將此方法調用的結果作爲List返回。我的列表綁定到一箇中繼器在用戶控制,並試圖在我的ascx文件訪問屬性「ENTRYID」和我收到以下錯誤:

「對象」不包含「ENTRYID」

的定義

我在我的數據訪問類方法:

public static List<Entry> GetAllEntries() 
{ 
    using (DataClassesDataContext context = new DataClassesDataContext()) 
    { 
     return context.fbGetAllEntries().ToList(); 
    } 
} 

和用戶控制Page_PreRender事件:

//my alias at the top of the file for clairification 
using ASPWebControls = System.Web.UI.WebControls; 

protected void Page_PreRender(System.Object sender, System.EventArgs e) 
{ 
    rptEntries = new ASPWebControls.Repeater(); 

    rptEntries.DataSource = DataAccess.GetAllEntries(); 

    rptEntries.DataBind(); 
} 

而且在我的ascx文件:

<asp:Repeater ID = "rptEntries" runat = "server" > 
    <ItemTemplate> 
     <tr> 
      <td><input type="checkbox" runat="server" value="<%# Container.DataItem.EntryId %>" /></td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

當我谷歌搜索這個錯誤,我發現它可以發生在使用匿名類型時,但這不是這裏的情況。我確定我的轉發器有一個綁定到它的強類型對象的列表。我試過explicitally鑄造:

rptEntries.DataSource = (List<Entry>)DataAccess.GetAllEntries(); 

我敢肯定我的條目類型有ENTRYID我能做到這一點:

foreach (Entry en in (List<Entry>)rptEntries.DataSource) 
{ 
    //when I step through I can see these are the correct values 
    int i = en.EntryId; 
} 

我試着輸入我的名字空間在我的ascx文件:

<%@ Import NameSpace="Namespace.in.my.DataClass.cs" %> 

我不確定哪裏的事情橫向,有人可以提出我做錯了什麼?任何幫助將不勝感激,謝謝!

編輯:錯過了一個代碼塊

回答

2

即使項目被強類型,Repeater控件將它們公開爲對象 - ItemTemplate中的類型。你需要明確拆箱它:

<%# ((Entry)Container.DataItem).EntryId %> 

注意ASP.Net 4.5strongly-typed repeater,使您可以指定一個ItemType財產,消除了拆箱的需要。

+0

這似乎這樣做,謝謝! – TheMethod

1

嘗試在該複選框您的數據綁定聲明如下:

value="<%# Eval("EntryId") %>" 
相關問題