2009-11-11 52 views
0

在datarepeater控件中做這件事的正確方法是什麼?沒有子控件的DataRepeater

   <asp:Repeater ID="Repeater1" runat="server"> 
       <ItemTemplate> 
       <strong><%= Eval("FullName") %></strong><br /> 
       <p> 
       <%= Eval("Summary") %> 
       </p> 
       </ItemTemplate> 
       </asp:Repeater> 

獲取錯誤數據綁定方法如eval()函數,XPath的(),並綁定()只能在數據綁定控件的上下文中使用。

我想寫出FullName和Summary。但我不想嵌套子控件。 是Repsonse.Write最好的方法?

UPDATE: 不知道這是必要的,但我能解決這個問題的唯一途徑是與對照

+0

你在你的代碼所缺少Repeater1.DataSource和Repeater1.DataBind()? – 2009-11-11 20:30:28

+0

沒有。 CodeBehind沒有錯。 – BuddyJoe 2009-11-11 20:44:32

回答

3

中繼器需要一個數據源,分配了類似這樣:

public class Foo 
{ 
public string FullName { get;set; } 
public string Summary {get;set; } 

public Foo(fullName,summary) 
{ 
    FullName=fullName; 
    Summary=summary; 
} 
} 

/// elsewhere... 
List<Foo> myFoos = new List<Foo>(); 
myFoos.Add(new Foo("Alice","Some chick")); 
myFoos.Add(new Foo("Bob","Some guy")); 
myFoos.Add(new Foo("Charlie","Indeterminate")); 
Repeater1.DataSource = myFoos; 
Repeater1.DataBind(); 

如本例所示,您的數據源可以是任何實現IEnumerable的東西 - 列表是我的最愛,但C#中的大多數集合都屬於這個類別。您的數據源確實不是而是必須來自數據庫或任何特定位置。

您不必使用response.write或subcontrols。 (無論如何,服務器控件在中繼器內都是無效的)。你可以嘗試用

<%#Eval("... 

我不確定的差異更換

<%=Eval("... 

,但第二種形式在大多數例子中使用。

+1

用<%#替換<%=將解決問題。如果控件沒有數據源,它將不會輸出任何內容。 – 2009-11-11 20:34:43

+0

與<%= Eval我得到錯誤 - 數據綁定方法如Eval(),XPath()和Bind()只能用於數據綁定控件的上下文中。 with <%#參數類型System.String不能分配給參數類型字符串。 怪異 – BuddyJoe 2009-11-11 20:40:58

+0

發佈您的修改標記。 – 2009-11-11 21:11:40

0

你總是可以嘗試如下:

<%# DataBinder.Eval(Container.DataItem, "FullName") %> 
+0

這給了我一個錯誤。你不能在DataBound控件之外使用DataBinder? – BuddyJoe 2009-11-11 20:33:57

+0

您是不是將您的中繼器綁定到某個數據源? – Chris 2009-11-11 20:52:58

相關問題