Solved

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Posted on 2009-05-18
3
659 Views
Last Modified: 2012-05-07
I am trying to add a meta tag programatically. However, I get the error :

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>)., when trying to add. See code below.

I do not want to move the script in <%...%> in the body as it is present in all my aspx files. How can I get this to work without making any changes in the aspx page.
<%@ Page language="c#" Inherits="Adomo.Web.Login" CodeFile="Default.aspx.cs" Title="<%$ Resources:PageTitle %>" %>

<!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 />

		<meta name="vs_snapToGrid" content="False" />

		<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR" />

		<meta content="C#" name="CODE_LANGUAGE" />

		<meta content="JavaScript" name="vs_defaultClientScript" />

		<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema" />

		<link href="AdomoCss.css" type="text/css" rel="Stylesheet" /><%

    /*	Add reference for language dependent stylesheet to override layout where needed for non en-US pages. Typically, column widths will be overruled where needed.

Not added for pages called with en-US or with no culture tag (admin pages). */

    if (cultureTag != null && cultureTag != "en-us")

    {

        Response.Write("<link href='AdomoCss." + cultureTag + ".css' type='text/css' rel='Stylesheet' />");

    }

		%>

</head>
 

Adding the html meta tag in code behind in OnLoad method
 

HtmlMeta meta = new HtmlMeta();

meta.HttpEquiv = "X-UA-Compatible";

meta.Content = "IE=EmulateIE7";

this.Header.Controls.Add(meta);

Open in new window

0
Comment
Question by:anshugupta_fremont
  • 2
3 Comments
 
LVL 9

Assisted Solution

by:tetorvik
tetorvik earned 125 total points
ID: 24418896
There are couple of options I am aware of:

1# remove the Response.Write() and add the css link dynamically in code-behind
http://www.aspdotnetfaq.com/Faq/How-to-Programmatically-add-CSS-Stylesheet-file-to-Asp-Net-page.aspx

2# change the <%= %> to binding expression <%# %>
http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/
0
 

Author Comment

by:anshugupta_fremont
ID: 24424028
Do I have any other option (within code behind), that doesnt require change in the aspx file (because , I will have to make this change in 10 other aspx file).

Also, can you please explain why this is happening?

Thanks in Advance
0
 
LVL 9

Accepted Solution

by:
tetorvik earned 125 total points
ID: 24425213
Apparently you are modifying HtmlHead's control collection at code-behind and at aspx page, which is not allowed. I am not aware of the exact reason why this is not allowed.

However I came across one additional hack that gets you around the issue without modifying code-behind code. You'll need to wrap your head (<%=...%>) fragmant with some placeholder (asp:PlaceHolder will do), then you're not modifying the same control collection anymore.
<asp:PlaceHolder runat="server" ID="fbar"> 

<%

  if (cultureTag != null && cultureTag != "en-us")

  {

        Response.Write("<link href='AdomoCss." + cultureTag + ".css' type='text/css' rel='Stylesheet' />");

  }

    

%>

</asp:PlaceHolder>

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Allow space in this pattern 2 46
Angular JS Route 3 44
consuming an asmx web service in winforms application 3 24
SQL Exceptions 3 35
I have developed many web applications with asp & asp.net and to add and use a dropdownlist was always a very simple task, but with the new asp.net, setting the value is a bit tricky and its not similar to the old traditional method. So in this a…
I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

948 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now