Solved

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

Posted on 2009-05-18
3
652 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
Comment Utility
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
Comment Utility
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
Comment Utility
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

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This article discusses the ASP.NET AJAX ModalPopupExtender control. In this article we will show how to use the ModalPopupExtender control, how to display/show/call the ASP.NET AJAX ModalPopupExtender control from javascript, how to show/display/cal…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

743 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

15 Experts available now in Live!

Get 1:1 Help Now