views:

397

answers:

2

I'm trying to use the Response.Write() method to dynamically insert content in the < head > section of an aspx page. I need to inject a string value from a property on a code-behind object which is a link to my CSS file. However, it is not being processed properly at run time. The object is public on the class and is hydrated in the Page_Load() event. Down in the body of the page I can successfully inject other properties from the Corpoartion object with no problem at all.

Why does this not work in the < head > section?

This is the part that does not expand correctly:

<link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />

Here is the entire < head > section:

<head runat="server">
    <title></title>
    <link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />
    <script language="JavaScript" type="text/JavaScript" src="cntv_menu.js"></script>
    <script language="JavaScript" type="text/JavaScript" src="cntv_category.js"></script>   
</head>

What is the reason that this will not expand properly?

+3  A: 

You can't use <%= %> inside a runat="server" tag, which your <head> tag is.

You can either change it to <%# %> and DataBind to it in the code-behind, or you can make the link tag runat="server", give it an id and assign the attribute from the code behind.

See this answer, which goes into the details.

Richard Szalay
Thanks. You got me going. < head > had runat="server" already, so it turns out I did not need to add that to the link, but I did give the link an id="csslink" and then in codebehind, I call csslink.DataBind(). Works like a charm!
MattSlay
A: 

If you write out the full line you should be ok:

<%
Response.write("<link href=\"" + Corporation.PageStyleSheet + "\" rel=\"stylesheet\" />");
%>

P.S. My syntax may not be completely right, sorry in advance.

Luke Duddridge
That won't work for the same reason that `<%= %>` doesn't work. The code within a runat=server control is parsed as a server-control tree only.
Richard Szalay
Good idea for thinking outside the box (kind of), but, as stated, it still doesn't work. Sorry, man.
MattSlay
That's odd, because I have it working in a head runat="server"Does ASP.NET runat Server work differently from MVC? or is it because my head section is inside a masterpage anyone know?
Luke Duddridge
@Luke Duddridge FYI, you shouldn't be using head runat="server" with ASP.NET MVC as doing so mixes control hierarchies (webforms) with MVC
Richard Szalay