I am deciding whether to use the Telerik controls for a project. The problem I've got is fairly straightforward and I've tried to create an ultra simple test code to see if it works and it doesn't.
I have a page with various forms of user input. I want a panel that displays a list of dynamically loaded user controls based on the user input.
For my test page I have simply created 3 user controls: control_a, control_b and control_c
On the main page I have a text input box and a "submit" button. I also have a xmlhttppanel and that simply has a placeholder in it The submit_click event simply reads .text property of the text box and does:
foreach (char c in txt_input.Text) {
if ("abc".Contains(c))
{
s = (UserControl)Page.LoadControl(string.Format("~/test/control_{0}.ascx", c));
s.ID = string.Format("asynccontrol_{0}", i++);
ph_panel.Controls.Add(s);
} }
This works. It dynamically loads a set of user controls based on the user input.
However, in control_a I have a label, a text box and a "save" button. The save_click event simply copies the text box text to the label.text
Without using the rad control xmlhttppanel I was having a problem with a standard .net form that the dynamically loaded user controls weren't persisting. The rad xmlhttppanel appears to solve this (fab). However, the save_click event isn't executing. What have I missed?
Do I need to do anything else to make this app run safely and robustly?
<
telerik:RadXmlHttpPanel
runat
=
"server"
ID
=
"pnlRoom"
OnServiceRequest
=
"pnlRoom_ServiceRequest"
EnableClientScriptEvaluation
=
"true"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
RenderMode
=
"Block"
>
<
asp:Repeater
runat
=
"server"
ID
=
"rptGroups"
OnItemDataBound
=
"rptGroups_ItemDataBound"
ClientIDMode
=
"AutoID"
>
<
ItemTemplate
>
<
fieldset
class
=
"fieldsetBlock1"
>
<
div
class
=
"fieldsetTitle"
>
<%# Eval("GROUP_NAME")%>
</
div
>
<
telerik:RadXmlHttpPanel
runat
=
"server"
ID
=
"pnlGroup"
OnServiceRequest
=
"pnlGroup_ServiceRequest"
RenderMode
=
"Block"
>
<
asp:Repeater
ID
=
"rptItems"
runat
=
"server"
EnableViewState
=
"false"
ClientIDMode
=
"AutoID"
>
<
HeaderTemplate
>
<
table
width
=
"574px"
class
=
"hor-minimalist-b"
>
<
tbody
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
tr
>
<
td
style
=
"padding: 12px 8px;"
>
<
a
href
=
"javascript:;"
onclick='<%# string.Format("openItem(this,{0},0);", Eval("JOB_ITEM_ID")) %>'
class="a-job-item">
<%# Eval("ItemSummary") %></
a
>
</
td
>
</
tr
>
</
ItemTemplate
>
<
FooterTemplate
>
</
tbody
> </
table
>
</
FooterTemplate
>
</
asp:Repeater
>
<
div
class
=
"divAddNewLinkButton"
>
<
a
href
=
"javascript:;"
onclick='<%# string.Format("openItem(this,0,{0});", Eval("JOB_ITEM_GROUP_ID")) %>'>
<
span
>✚</
span
> New Item</
a
></
div
>
</
telerik:RadXmlHttpPanel
>
</
fieldset
>
</
ItemTemplate
>
<
SeparatorTemplate
>
<
br
/>
</
SeparatorTemplate
>
</
asp:Repeater
>
</
telerik:RadXmlHttpPanel
>
<
telerik:RadXmlHttpPanel
ID
=
"radXmlHttpPanel"
runat
=
"server"
OnServiceRequest
=
"radXmlHttpPanel_OnServiceRequest"
RenderMode
=
"Block"
EnableClientScriptEvaluation
=
"true"
LoadingPanelID
=
"loadingPanelSupervisorHome"
>
<
div
id
=
"listEmployeeCoverages"
runat
=
"server"
>
<
div
id
=
"employeeCoveragesSchedule"
>
<
telerik:RadScheduler
ID
=
"schedulerEmployeeCoverage"
runat
=
"server"
SelectedView
=
"TimelineView"
ReadOnly
=
"True"
OverflowBehavior
=
"Expand"
OnNavigationComplete
=
"schedulerEmployeeCoverage_OnNavigationComplete"
OnNavigationCommand
=
"schedulerEmployeeCoverage_OnNavigationCommand"
OnAppointmentDataBound
=
"schedulerEmployeeCoverage_OnAppointmentDataBound"
DataKeyField
=
"Detail.Key"
DataSubjectField
=
"Subject"
DataStartField
=
"Detail.StartDateTime"
DataEndField
=
"Detail.StopDateTime"
>
<
TimelineView
UserSelectable
=
"False"
GroupBy
=
"Employee"
GroupingDirection
=
"Vertical"
ShowInsertArea
=
"False"
SlotDuration
=
"01:00:00"
ShowDateHeaders
=
"true"
ColumnHeaderDateFormat
=
"htt"
></
TimelineView
>
<
DayView
UserSelectable
=
"False"
></
DayView
>
<
WeekView
UserSelectable
=
"False"
></
WeekView
>
<
MonthView
UserSelectable
=
"False"
></
MonthView
>
</
telerik:RadScheduler
>
</
div
>
</
div
>
</
telerik:RadXmlHttpPanel
>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Main" %>
<%@ Register Assembly="Telerik.Web.UI" 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
id
=
"Head1"
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
runat
=
"server"
ID
=
"RadScriptManager1"
/>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function SetValue() {
var panel = $find("<%=XmlPanel1.ClientID %>");
panel.set_value("test");
}
</
script
>
</
telerik:RadScriptBlock
>
<
div
>
<
telerik:RadComboBox
ID
=
"RadComboBox1"
runat
=
"server"
CheckBoxes
=
"true"
EnableCheckAllItemsCheckBox
=
"true"
Width
=
"300"
Label
=
"Select book genres:"
>
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"Arts"
/>
<
telerik:RadComboBoxItem
Text
=
"Biographies"
/>
<
telerik:RadComboBoxItem
Text
=
"Children's Books"
/>
<
telerik:RadComboBoxItem
Text
=
"Computers & Internet"
/>
<
telerik:RadComboBoxItem
Text
=
"Cooking"
/>
<
telerik:RadComboBoxItem
Text
=
"History"
/>
<
telerik:RadComboBoxItem
Text
=
"Fiction"
/>
<
telerik:RadComboBoxItem
Text
=
"Mystery"
/>
<
telerik:RadComboBoxItem
Text
=
"Nonfiction"
/>
<
telerik:RadComboBoxItem
Text
=
"Romance"
/>
<
telerik:RadComboBoxItem
Text
=
"Science Fiction"
/>
<
telerik:RadComboBoxItem
Text
=
"Travel"
/>
</
Items
>
</
telerik:RadComboBox
>
</
div
>
<
div
>
<
input
value
=
"Set Value"
onclick
=
"SetValue(); return false;"
type
=
"button"
/>
<
div
>
<
telerik:RadXmlHttpPanel
ID
=
"XmlPanel1"
runat
=
"server"
OnServiceRequest
=
"XmlPanel1_ServiceRequest"
EnableClientScriptEvaluation
=
"true"
>
<
telerik:RadComboBox
ID
=
"ComboBox1"
runat
=
"server"
>
</
telerik:RadComboBox
>
</
telerik:RadXmlHttpPanel
>
</
div
>
</
div
>
</
form
>
</
body
>
</
html
>
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
public
partial
class
Main : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
XmlPanel1_ServiceRequest(
object
sender, Telerik.Web.UI.RadXmlHttpPanelEventArgs e)
{
ArrayList itemsList =
new
ArrayList();
itemsList.Add(
"Beverages"
);
itemsList.Add(
"Condiments"
);
itemsList.Add(
"Confections"
);
ComboBox1.DataSource = itemsList;
ComboBox1.DataBind();
}
}