2009-11-11 31 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

相关问题