We have a RadListBox where we are adding and removing items via client side code (sample add shown):
ListBox_AddItem = function (listbox, text, value) {
var item = new Telerik.Web.UI.RadListBoxItem();
item.set_value(value);
item.set_text(text);
var attributes = item.get_attributes();
attributes.setAttribute("Name", text);
attributes.setAttribute("ID", value);
listbox.trackChanges();
listbox.get_items().add(item);
item.bindTemplate();
listbox.commitChanges();
return false;
}
<telerik:RadListBox runat="server" ID="RadListBox" ClientIDMode="AutoID"
OnClientLoad="RadListBox_OnClientLoad">
<ItemTemplate>
<table>
<tr>
<td>
<%# Eval("Name") %>
</td>
<td id="DeleteColumn" style="float: right">
<a href="" onclick="return deleteRequestedBy('<%# Eval("id") %>')">
<img src="Images/deletered.png" width="20" height="20" alt="submit" />
</a>
</td>
</tr>
</table>
</ItemTemplate>
<ClientItemTemplate>
<table>
<tr>
<td>
#= Attributes.Name#
</td >
<td id="DeleteColumn" style="float:right">
<a href="" onclick="return deleteRequestedBy('#= Attributes.ID#')">
<img src="Images/deletered.png" width="20" height="20" alt="submit" />
</a>
</td>
</tr>
</table>
</ClientItemTemplate>
</telerik:RadListBox>
The ListBox is in a Tab on a RadTabStrip. When we add or remove items from the ListBox and then click on one of the other tabs we get an error:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Web.UI.StateManagedCollection.System.Collections.IList.get_Item(Int32 index)
at Telerik.Web.UI.ControlItemCollection.get_Item(Int32 index)
at Telerik.Web.UI.ClientStateLogPlayer`1.Remove(ControlItemCollection items, Int32 index)
at Telerik.Web.UI.ClientStateLogPlayer`1.Play(ClientStateLogEntry entry)
at Telerik.Web.UI.ClientStateLogPlayer`1.Play(IEnumerable`1 clientStateLogEntry)
at Telerik.Web.UI.RadListBox.LoadLogEntries(RadListBoxClientState clientState)
at Telerik.Web.UI.RadListBox.LoadClientState(RadListBoxClientState clientState)
at Telerik.Web.UI.RadListBox.LoadPostData(String postDataKey, NameValueCollection postCollection)
at Telerik.Web.UI.RadDataBoundControl.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
I've tried the solutions suggested (along with some variations):
https://www.telerik.com/forums/transfer-throws-exception
https://docs.telerik.com/devtools/aspnet-ajax/controls/listbox/troubleshooting/index-out-of-range-on-item-transfer-
However, none of the suggestions worked and don't seem to quite apply in this scenario i.e. we are not transferring.