0
ListView 컨트롤에서 TextBox 컨트롤의 ClientID 값을 검색하는 데 문제가 있습니다. 이 구문이 내게 ClientID를 매우 좋게 반환 할 것이라고 생각했습니다. 매우 이상합니다. (TextBox) e.Item.FindControl ("amount")) ClientID;ListView의 ItemDataBound 이벤트 내에서 TextBox 컨트롤의 ClientID를 검색하는 방법은 무엇입니까?
그러나이 예외가 던져 계속 :
가. "인덱스가 범위를 벗어났습니다은 컬렉션의 크기보다 음이 아닌 및 작아야합니다 매개 변수 이름 :. 인덱스"
모든 도움이 대단히 감사합니다. 영문 : 다음은 내 코드입니다
<asp:ListView ID="categories" runat="server"
ClientIDRowSuffix="ID"
ItemPlaceholderID="categoryItem"
DataKeyNames="ID" onitemdatabound="categories_ItemDataBound">
<ItemTemplate>
<div class="category">
<asp:TextBox ID="amount" runat="server" />
</div>
</ItemTemplate>
</asp:ListView>
코드 숨김 :
public string AmountTextBoxClientID { get; set; }
protected string GetAmountTextBoxClientID()
{
return this.AmountTextBoxClientID;
}
protected void categories_ItemDataBound(object sender, ListViewItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListViewItemType.DataItem:
TextBox amountTextBox = (TextBox)e.Item.FindControl("amount");//this line excutes without any error
amountTextBox.Text = categoryAmount.ToString("C");
amountTextBox.Attributes.Add("readonly", "readonly");
this.AmountTextBoxClientID = amountTextBox.ClientID; //this line keeps throwing the OutOfRange exception
break;
}
}
기독교인, 제 문제를 살펴 주셔서 감사합니다. 내 문제를 알아 냈다고 생각해. Page_Load 이벤트에서 내 데이터 소스를 바인딩하지 않았습니다. 내 사용자 컨트롤의 base.bind() 메서드에서 Databind() 메서드를 호출하고있었습니다. 이 문제에 대한 내 해결 방법은 ListView 컨트롤이 페이지에 완전히로드 된 후이 코드를 사용하는 것입니다. foreach (this.categories.Items의 ListViewItem li) { TextBox tbox = (TextBox) li.FindControl ("amount"); this.AmountTextBoxClientID = tbox.ClientID; } – netNewBee