0
ListBoxコントロールからTextBoxコントロールのClientID値を取得する際に問題があります。 私はこの構文が私にClientIDを返すと思った(非常に奇妙な): ((TextBox)e.Item.FindControl( "amount"))。ListBoxのItemDataBoundイベント内でTextBoxコントロールのClientIDを取得する方法は?
が、それはこの例外をスローし続ける:
は、「インデックスが範囲外でした負でないコレクションのサイズよりも小さくなければなりません パラメータ名:インデックス」
どれでも助けが大変ありがとうございます。 ASPX: 以下は私のコードである
<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