如何在不使用 LinkBut​​ton 的情况下使用中继器的 OnItemCommand 触发文本框事件?

How to fire event of textbox with OnItemCommand of a repeater , without using LinkButton?

我有一个内部有文本框的转发器,我想触发一个事件 当我从一个文本框移动到另一个文本框时,OnItemCommand 中继器。

<asp:Repeater ID="RptrPeople" runat="server" OnItemDataBound="RptrPeople_ItemDataBound" OnItemCommand="RptrPeople_ItemCommand">
         <ItemTemplate>
                <asp:HiddenField ID="hf" runat="server" Value="<%# Eval(this.ValuedPerson) %>" />
                <asp:TextBox ID="txtDescription" runat="server" IsRequired="false" Visible="true" AutoPostBack="true"  />
         </ItemTemplate>
</asp:Repeater> 

我尝试使用文本框的 OnTextChanged,但我无法通过这种方式获取触发事件的项目。

在我从一个文本框移动后,使用 OnItemCommand(例如,我在 Textbox #1 ,然后移动到 Textbox #2 ...然后我想触发处理具有 123 值的文本框的事件)?

谢谢

I tried to use the OnTextChanged of the Textbox , but I can't get the item that fired the event this way .

sender参数始终是触发事件的控件:

protected void txtDescription_TextChanged(Object sender, EventArgs e)
{
    TextBox txtDescription = (TextBox) sender;
}

所以你应该使用这个而不是 OnItemCommand 因为 sender 是转发器。

如果您还需要获取 HiddenField 的引用,请使用以下代码:

protected void txtDescription_TextChanged(Object sender, EventArgs e)
{
    TextBox txtDescription = (TextBox) sender;
    var item = (RepeaterItem) txtDescription.NamingContainer;
    HiddenField hf = (HiddenField) item.FindControl("hf");
}

RepeaterItem 中任何控件的 NamingContainer 始终是 RepeaterItem。顺便说一句,这对于其他网络数据绑定控件(如 GridViewDataList.

的工作方式类似