如何使用转发器的OnItemCommand触发文本框的事件,而不使用LinkBut​​ton?

时间:2015-04-30 10:32:19

标签: c# asp.net visual-studio-2012 repeater asprepeater

我有一个带有文本框的转发器,我想发射一个事件 当我从一个文本框移动到另一个文本框时,使用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(例如,我在123中输入了Textbox #1,任何人都可以建议一个好方法来获取触发事件的项目},然后转移到Textbox #2 ...然后我想触发处理具有123值的文本框的事件?

由于

1 个答案:

答案 0 :(得分:3)

  

我尝试使用文本框的OnTextChanged,但我无法获得   以这种方式解雇事件的项目。

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");
}

NamingContainer中任何控件的RepeaterItem始终为RepeaterItem。顺便说一句,这与其他网络数据绑定控件类似,例如GridViewDataList