Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"The Controls collection cannot be modified because the control contains code blocks"

I am trying to create a simple user control that is a slider. When I add a AjaxToolkit SliderExtender to the user control I get this (*&$#()@# error:

Server Error in '/' Application. The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.  Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).  Source Error:  An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  Stack Trace:  [HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).]    System.Web.UI.ControlCollection.Add(Control child) +8677431    AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs:293 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ExtenderControlBase.cs:306 System.Web.UI.Control.LoadRecursive() +50    System.Web.UI.Control.LoadRecursive() +141    System.Web.UI.Control.LoadRecursive() +141    System.Web.UI.Control.LoadRecursive() +141    System.Web.UI.Control.LoadRecursive()              +141    System.Web.UI.Control.LoadRecursive() +141    System.Web.UI.Control.LoadRecursive() +141    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627   Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074 

I have tried putting a placeholder in the user control and adding the textbox and slider extender to the placeholder programmatically and I still get the error.

Here is the simple code:

<table cellpadding="0" cellspacing="0" style="width:100%">     <tbody>         <tr>             <td></td>             <td>                 <asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />                 <asp:Label ID="lblMinValue" runat="server" Text="Minimum" />             </td>         </tr>         <tr>             <td style="width:60%;">                 <asp:CheckBox ID="chkOn" runat="server" />                 <asp:Label ID="lblPrefix" runat="server" />:&nbsp;                 <asp:Label ID="lblSliderValue" runat="server" />&nbsp;                 <asp:Label ID="lblSuffix" runat="server" />             </td>             <td style="text-align:right;width:40%;">                                      <asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />                     <ajaxToolkit:SliderExtender ID="seSlider" runat="server"                          BehaviorID="seSlider"                          TargetControlID="txtSlider"                          BoundControlID="lblSliderValue"                          Orientation="Horizontal"                          EnableHandleAnimation="true"                          Length="200"                          Minimum="0"                          Maximum="100"                          Steps="1" />              </td>         </tr>     </tbody> </table> 

What is the problem?

like image 349
Daniel P Avatar asked Apr 22 '09 20:04

Daniel P


2 Answers

First, start the code block with <%# instead of <%= :

<head id="head1" runat="server">   <title>My Page</title>   <link href="css/common.css" rel="stylesheet" type="text/css" />   <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script> </head> 

This changes the code block from a Response.Write code block to a databinding expression.
Since <%# ... %> databinding expressions aren't code blocks, the CLR won't complain. Then in the code for the master page, you'd add the following:

protected void Page_Load(object sender, EventArgs e) {   Page.Header.DataBind();     } 
like image 167
Jalal El-Shaer Avatar answered Sep 29 '22 12:09

Jalal El-Shaer


I just ran into this problem as well but found another solution.

I found that wrapping the code blocks with a asp:PlaceHolder-tag solves the problem.

<asp:PlaceHolder runat="server">   <meta name="ROBOTS" content="<%= this.ViewData["RobotsMeta"] %>" /> </asp:PlaceHolder> 

(The CMS I'm using is inserting into the head-section from some code behind which restricted me from adding custom control blocks with various information like meta-tags etc so this is the only way it works for me.)

like image 39
Jonas Stensved Avatar answered Sep 29 '22 13:09

Jonas Stensved