
Hello everyone.
I'm using a Window on my page that has a Rotator in it. The Rotator is bound to a LINQ data set. It worked fine,
but then I tried to put an AJAX Loading Panel to show a "loading" image while the rotator is bound and I get the following error:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
I tried using a RadCodeBlock without luck.
Here is my code:
(Main .aspx page)
<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
<script type="text/javascript">
//<![CDATA[
function openWin()
{
var oWnd = radopen("SCARLog.aspx", "RadWindow1");
}
//]]>
</script>
</telerik:RadScriptBlock>
<telerik:RadWindowManager ID="RadWindowManager1" ShowContentDuringLoad="false" VisibleStatusbar="false"
ReloadOnShow="true" runat="server" Skin="Hay" EnableShadow="true">
<Windows>
<telerik:RadWindow ID="RadWindow1" runat="server" Behaviors="Close" NavigateUrl="Log.aspx">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
(.aspx window page)
<body height="100%" scroll="no" style="overflow:hidden;" scrooltop="oTop" >
<form>
<title>Detail Log</title>
<telerik:RadScriptManager ID="RadScriptManager1" runat="server" ></telerik:RadScriptManager>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="Panel1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="Panel1" LoadingPanelID="RadAjaxLoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadFormDecorator ID="RadFormDecorator1" DecoratedControls="All" runat="server" Skin="Hay" />
<asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center" Height="275px">
<telerik:RadRotator ID="Rotator" runat="server" Skin="Hay" ScrollDirection="Up"
RotatorType="AutomaticAdvance" FrameDuration="3000" Width="300px" ItemWidth="302px" Height="100px" ItemHeight="100px">
<ItemTemplate>
<div style="text-align:center">
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<asp:Label ID="lblDate" runat="server">Date: <%# DataBinder.Eval(Container.DataItem,"DateChanged") %></asp:Label>
</telerik:RadCodeBlock>
</div>
<div style="text-align:center">
<asp:Label ID="Label2" runat="server">User ID: </asp:Label>
<telerik:RadCodeBlock ID="RadCodeBlock2" runat="server">
<asp:Label ID="lblUser" runat="server"><%# DataBinder.Eval(Container.DataItem, "UserID")%></asp:Label>
</telerik:RadCodeBlock>
</div>
<div style="text-align:center">
<asp:Label ID="Label3" runat="server">From status: </asp:Label>
<telerik:RadCodeBlock ID="RadCodeBlock3" runat="server">
<asp:Label ID="lblFrom" runat="server"><%# DataBinder.Eval(Container.DataItem, "FromStatus")%></asp:Label>
</telerik:RadCodeBlock>
</div>
<div style="text-align:center">
<asp:Label ID="Label4" runat="server">To status: </asp:Label>
<telerik:RadCodeBlock ID="RadCodeBlock4" runat="server">
<asp:Label ID="lblTo" runat="server"><%# DataBinder.Eval(Container.DataItem, "ToStatus")%></asp:Label>
</telerik:RadCodeBlock>
</div>
</ItemTemplate>
</telerik:RadRotator>
</asp:Panel>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" BackgroundPosition="Center" EnableSkinTransparency="true">
<asp:Image id="Image1" runat="server" ImageUrl="~/images/Loading.gif" ></asp:Image>
</telerik:RadAjaxLoadingPanel>
</form>
</body>
(.aspx.cs code)
if (!this.IsPostBack)
{
System.Threading.Thread.Sleep(1000);
Int32 Snum = Convert.ToInt32(Session["IDNumber"].ToString());
using (Entity db = new Entity())
{
var data = from L in db.Log
where L.IDNumber == Snum
orderby L.DateChanged
select new
{
L.DateChanged,
L.FromStatus,
L.ToStatus,
L.UserID,
};
Rotator.DataSource = data;
Rotator.DataBind();
}
}
I have a very complex RadGrid that is bound with a list that's stored in the session. The grid's master table consists of one row per day in a given month, so it ranges from 28 to 31 rows. Each grid item has 8 controls varying between native ASP controls to Telerik controls. Each grid item also has a detail table which contains 3 gridbound columns with between 5 and 8 rows a piece. As you can imagine, it's a pretty large grid.
The issues we come across relate to speed with ajaxification. We have the ajaxmanager set up as an AjaxSetting and one of the controls it updates is the radgrid (rgEmployees). We have it set up this way because we have clientside script that calls the ajaxmanager using .ajaxRequest("RebindGrid") which ultimately results in the grid being rebound serverside. Here's the declaration:
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="rgEmployees" LoadingPanelID="RadAjaxLoadingPanel1" />
<telerik:AjaxUpdatedControl ControlID="OtherControls" />
<telerik:AjaxUpdatedControl ControlID="OtherControls" />
<telerik:AjaxUpdatedControl ControlID="OtherControls" />
</UpdatedControls>
</telerik:AjaxSetting>
Here's where it gets hairy: Each edit button, when clicked, calls .ajaxRequest("PopulateItem"). This takes the data from all the controls in the grid item and populates its cooresponding item in the session list on the server, after whice we use the ajax manager's ClientEvents-OnResponseEnd to invoke other javascript. The issue is that, since the button also calls .ajaxRequest(), the entire grid goes through its harrowing update/re-rendering process when we click the button since the radgrid is an updated control of the ajax manager.
Is there a way to modify the ajaxsettings/updated controls via client script? We would want to do this so that we could disable it for when we click the edit button since we wouldn't need to update any controls, but would want to keep it since we would need to rerender the grid after a rebind.
Conceptually, I would like to do something like this in javascript:
var UpdatedControl = AjaxManager.GetAjaxSetting("RadAjaxManager1").GetUpdatedControl("rgEmployees");
UpdatedControl.disable();
AjaxManager.ajaxRequest("PopulateItem")
UpdatedControl.enable();
I obviously just made that up, but perhaps you can see where I am going with this.
If necessary, I can create a sample app. Due to the complexity of the grid, though, that could take some time, so I hope I explained myself good enough here.
