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,
""
));
}
}
}
}
}