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> <
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") %>' />