Asp.net 如何将中继器绑定到列表<;人>;是否还要更新绑定项?(双向)

Asp.net 如何将中继器绑定到列表<;人>;是否还要更新绑定项?(双向),asp.net,data-binding,repeater,Asp.net,Data Binding,Repeater,如果我有一个列表,其中Person是由类定义的 class Person { string Forename { get;set; } string Surname { get; set; } } 我将其绑定到一个asp repeater控件,该控件如下所示: <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <

如果我有一个列表,其中Person是由类定义的

class Person
{
   string Forename
   {
      get;set;
   }
   string Surname
   {
      get; set;
   }
}
我将其绑定到一个asp repeater控件,该控件如下所示:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblForename" runat="server" Text="Forname" AssociatedControlID="txtForename" />
        <asp:TextBox ID="txtForename" runat="server" Text='<%# ((Person)Container.DataItem).Forename %>' />
        <br />
        <asp:Label ID="lblSurname" runat="server" Text="Forname" AssociatedControlID="txtSurname" />
        <asp:TextBox ID="txtSurname" runat="server" Text='<%# ((Person)Container.DataItem).Surname %>' />
        <br />
    </ItemTemplate>
</asp:Repeater>
如果是这样,为什么DataItem属性总是空的

其他信息:

我已经在调用代码的效果

this.Repeater1.DataSource =  this.PersonList;
this.Repeater1.DataBind();

我尝试过使用
Bind(“Forename”)
,但这似乎无法将文本框中的信息带回对象,我是否必须手动执行此操作?

除上述操作外,您还需要将中继器绑定到列表。现在,文本框被指定给名字的值(如果使用

<# Bind("Forename") %>


标记),但中继器容器没有数据项。

如果您将中继器与您想要的人员列表绑定

this.Repeater1.DataSource =  GetPersons();
而GetPersons()是一个返回person对象列表的方法 你可以用

<asp:TextBox ID="txtForename" runat="server" Text='<%# Eval("Forename") %>' />

简单的答案是中继器控件不支持您正在寻找的那种双向数据绑定。除此之外,DataItem属性仅在创建repeater项期间使用,并且在ItemDataBound事件之后,它被设置为nothing。因此,在回发后创建特定的转发器项时,不能使用该属性获取使用的原始对象(就像在伪代码中所做的那样)


您必须按照您的建议循环遍历repeater项(在执行任何操作之前确保检查该项是否为ListItemType.item或AlternatingItem),然后从文本框中提取值并在更新中使用它们

不,这会填充中继器,但不会返回用户输入的数据。Eval是单向数据绑定,问题是询问双向数据绑定。
<asp:TextBox ID="txtForename" runat="server" Text='<%# Eval("Forename") %>' />