asp.net – 如何将转发器绑定到列表以更新绑定的项目? (2种方法)

前端之家收集整理的这篇文章主要介绍了asp.net – 如何将转发器绑定到列表以更新绑定的项目? (2种方法)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个列表<人>人是由班级定义的
class Person
{
   string Forename
   {
      get;set;
   }
   string Surname
   {
      get; set;
   }
}

我把它绑定到一个asp转发器控件,看起来像这样:

<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>

获取用户输入对象的数据的最佳方式是什么?

我认为数据绑定的全部要点是,这是有效地为您处理,但是当我检查Repeater1.Items集合时,没有任何更改.我必须编写代码来做某事

//This is only intended to be pseudo code
for each item in Repeater1.Items
    ((Person)item.DataItem).Forename = item.FindControl("txtForname").Text;
end for

如果是这样,为什么DataItem属性始终为空?

附加信息:

我已经在调用代码效果

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

我试过使用Bind(“Forename”),但这似乎没有把TextBox中的信息带回到对象中,我必须手动执行吗?

解决方法

简单的答案是,Repeater控件不支持您要查找的那种双向数据绑定.除此之外,DataItem属性仅在创建中继器项目时使用,而在ItemDataBound事件之后,它将被设置为无.因此,在回发之后创建特定的转发器项目(如您在伪代码中所做的那样),您无法使用该属性获取您使用的原始对象.

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

猜你在找的asp.Net相关文章