Hello.
I have a case:
1) User pastes a semicolon-separated list of entries into RadAutoCompleteBox;
2) Code must refine entries according to some logic and only add valid entries to Entries collection.
But it seems that the only case when I can modify RadAutoCompleteBox.Entries collection and my modifications are shown after postback is the initial load of a page. When I process 'paste' event on client via JavaScript and use __doPostBack(), any modifications to RadAutoCompleteBox.Entries are missed.
Here's a project reproducing the problem. When I paste, for example, "Most;are" (without quotes, assuming to paste two tokens: 'Most' and 'are'), nothing is added. If I comment out UpdatePanel it works as expected, but full page postback occurs.
MainPage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MainPage.aspx.cs" Inherits="RC.ITRequest.UI.MainPage" %><%@ Register Assembly="Telerik.Web.UI, Version=2012.2.1002.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><!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> <script type="text/javascript" src="jquery-1.8.2.min.js" ></script> <placeholder runat="server" > <script type="text/javascript"> $(document).ready(function () { $(document).on('paste', 'input[name="' + '<%=RACB.ClientID %>'.replace('_', '$') + '"]', function (e) { var el = $(this); /* Just a small timeout till value can get populated */ setTimeout(function () { // replace semicolon surrounded by sequences of space chars with single semicolon var text = $(el).val().replace(/ *; */g, ';'); __doPostBack('<%=RACB.ClientID %>', text); }, 100); }); }); </script> </placeholder></head><body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional" > <ContentTemplate> <telerik:RadAutoCompleteBox runat="server" ID="RACB" InputType="Token" /> </ContentTemplate> </asp:UpdatePanel> <asp:Label runat="server" ID="lblLog" /><br/> <asp:Button Text="Press me to post back!" runat="server" /> </div> </form></body></html>
MainPage.aspx.cs
using System;using System.Collections.Generic;using Telerik.Web.UI;namespace RC.ITRequest.UI{ public partial class MainPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { List<string> adObjects = new List<string> { "Most", "of", "these", "pages", "are", "in", "the", "Afrikaans", "language", "spoken", "in", "South", "Africa" }; RACB.DataSource = adObjects; if (Page.IsPostBack) { lblLog.Text += "<br/>__EVENTARGUMENT: '" + Request.Form["__EVENTARGUMENT"] + "'"; var newEntries = Request.Form["__EVENTARGUMENT"].Split(';'); foreach (string newEntry in newEntries) { RACB.Entries.Add(new AutoCompleteBoxEntry(newEntry, "")); } } } }}