Solved

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

Posted on 2009-05-18
3
669 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

VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

Question has a verified solution.

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

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…
One of the pain points with developing AJAX, JavaScript, JQuery, and other client-side behaviors is that JavaScript doesn’t allow for cross domain request for pulling content. For example, JavaScript code on www.johnchapman.name could not pull conte…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

770 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