When using Page.Header.Controls.Add to add something to a page header, or possibly other scenarios where you add a control to a collection, you may receive the following error message:

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

This happens when the page header (likely on the master page) contains code blocks (<% %>) as direct children. In the default Site.Master, any code blocks are placed within a PlaceHolder tag with runat=server (including the code block that renders the modernizr bundle, for example).

Always wrap any code blocks in a PlaceHolder with runat=server, as follows:

<asp:PlaceHolder runat="server">
    <%: // Some code here %>

The output does not change, and because the code blocks are now children of the PlaceHolder (and not the Page.Header), we can use Page.Header.Controls.Add().

See more info here: https://stackoverflow.com/a/4995628/4669143