DataRepeater没有子控件

时间:2009-11-11 20:18:58

标签: c# .net asp.net data-binding

在datarepeater控件中执行此操作的正确方法是什么?

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

获取错误数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。

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

更新: 不确定这是否有必要,但我能够解决的唯一方法是使用控件

2 个答案:

答案 0 :(得分: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或子控件。 (无论如何,服务器控件在转发器内部无效)。您可以尝试替换

<%=Eval("...

<%#Eval("...

我不确定区别,但大多数例子都使用了第二种形式。

答案 1 :(得分:0)

您可以随时尝试以下操作:

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