I'm not sure if this belongs here, under RadListBox or under Ajax (perhaps all three). But here it goes.
I came across an interesting error when using two RadListBoxes and RadFilter on the same page when the RadFilter was placed inside of a RadAjaxPanel. I managed to strip down the code to the very basics and still be able to reliably reproduce the error.
ASPX:
And the code behind:
As you can see, this is a very basic setup. One of the list boxes is data bound from a simple array of strings. The filter has nothing but a single static editor. The filter is wrapped in an update panel since we do not want or need to update the list boxes if a filter expression or group is added/modified/removed. Yet, if the list boxes are interacted with, the filter will eventually throw the following exception: Index was out of range.
The number of times you can make Ajax callbacks with the filter depends on how you have interacted with the list boxes. The quickest way was to move all items to the left, then one item back to the right. The second click of Add Expression throws the error.
This may not be limited to just RadFilter, but any control within a RadAjax panel. I did not get that far in my testing.
I can bypass the issue by wrapping all the controls in the ajax panel or using an ajax manager, but that's not really the point.
I came across an interesting error when using two RadListBoxes and RadFilter on the same page when the RadFilter was placed inside of a RadAjaxPanel. I managed to strip down the code to the very basics and still be able to reliably reproduce the error.
ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListBoxErrorTesting2.aspx.cs" Inherits="Testing.ListBoxErrorTesting2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <telerik:RadScriptManager ID="RadScriptManager1" runat="server" /> <telerik:RadListBox ID="SourceListBox" runat="server" AllowTransfer="true" TransferMode="Move" TransferToID="DestinationListBox" /> <telerik:RadListBox ID="DestinationListBox" runat="server" /> <br /> <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" /> <telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1" LoadingPanelID="RadAjaxLoadingPanel1"> <telerik:RadFilter runat="server" ID="ReportFilter"> <FieldEditors> <telerik:RadFilterTextFieldEditor FieldName="Title" DisplayName="Title" /> </FieldEditors> </telerik:RadFilter> </telerik:RadAjaxPanel> </div> </form></body></html>And the code behind:
using System;namespace Testing{ public partial class ListBoxErrorTesting2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; var data = new[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; DestinationListBox.DataSource = data; DestinationListBox.DataBind(); } }}As you can see, this is a very basic setup. One of the list boxes is data bound from a simple array of strings. The filter has nothing but a single static editor. The filter is wrapped in an update panel since we do not want or need to update the list boxes if a filter expression or group is added/modified/removed. Yet, if the list boxes are interacted with, the filter will eventually throw the following exception: Index was out of range.
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentOutOfRangeException: 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) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\Common\Navigation\ControlItemCollection.cs:line 30 at Telerik.Web.UI.ClientStateLogPlayer`1.Remove(ControlItemCollection items, Int32 index) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\Common\Navigation\ClientStateLogPlayer.cs:line 142 at Telerik.Web.UI.ClientStateLogPlayer`1.Play(ClientStateLogEntry entry) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\Common\Navigation\ClientStateLogPlayer.cs:line 62 at Telerik.Web.UI.ClientStateLogPlayer`1.Play(IEnumerable`1 clientStateLogEntry) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\Common\Navigation\ClientStateLogPlayer.cs:line 27 at Telerik.Web.UI.RadListBox.LoadLogEntries(RadListBoxClientState clientState) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\ListBox\RadListBox.cs:line 906 at Telerik.Web.UI.RadListBox.LoadClientState(RadListBoxClientState clientState) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\ListBox\RadListBox.cs:line 892 at Telerik.Web.UI.RadListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\ListBox\RadListBox.cs:line 800 at Telerik.Web.UI.RadDataBoundControl.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) in D:\Dev\clientaccessweb\Caw.ClientAccessWeb\trunk\Shared\TelerikSource\Telerik.Web.UI\Common\RadDataBoundControl.cs:line 653 at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.main_testing_listboxerrortesting2_aspx.ProcessRequest(HttpContext context) in c:\Users\trasmussen\AppData\Local\Temp\Temporary ASP.NET Files\root\e99f54ff\b41660f1\App_Web_listboxerrortesting2.aspx.dc92d279.2k6ikk-w.0.cs:line 0 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)The number of times you can make Ajax callbacks with the filter depends on how you have interacted with the list boxes. The quickest way was to move all items to the left, then one item back to the right. The second click of Add Expression throws the error.
This may not be limited to just RadFilter, but any control within a RadAjax panel. I did not get that far in my testing.
I can bypass the issue by wrapping all the controls in the ajax panel or using an ajax manager, but that's not really the point.