2

I am binding path like that in <link> tag

<link rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />

but it render like that...

<link rel="stylesheet" media="screen" href="&lt;%= ConfigurationManager.AppSettings[&quot;rootpath&quot;].ToString() %>UserAccountTemp/css/reset.css" />

and it is working <script> tag.

what the reason behind this and what is the solution?

UPDATE

to set AbsRoot_Path

in web.config

<add key="rootpath" value="http://localhost:1259/WallProfile/"/>

and set to AbsRoot_Path

public string AbsRoot_Path = ConfigurationManager.AppSettings["rootpath"].ToString();
Govind Malviya
  • 13,627
  • 17
  • 68
  • 94

2 Answers2

5

EDIT: OK, I'll be more specific here.

ASP.NET treats <link> inside <head> as a server-side controls even if you didn't specify runat="server" attribute there. So you're actually setting 'href' property of a server-side control, that's why you're getting so strange values there. So the workaround could be either adding id property for the <link> and accessing it server side:

<link id='lnkStylesheet' rel="stylesheet" media="screen" />

protected void Page_Init(object sender, EventArgs e)
{
    HtmlLink lnkStylesheet= (HtmlLink)Page.Header.FindControl("lnkStylesheet");
    lnkStylesheet.Href = AbsRoot_Path + "UserAccountTemp/css/reset.css";
}

or use a solution I provided in my initial answer:

It seems you define your <link> tag inside a <head> tag and ASP.NET doesn't allow to use server-side constructs there. But there is an easy workaround for this: you could add <link> control programmatically (use HtmlLink server-side control for this):

protected void Page_Init(object sender, EventArgs e)
{
    HtmlLink myHtmlLink = new HtmlLink();
    myHtmlLink.Href = AbsRoot_Path + "UserAccountTemp/css/reset.css";
    myHtmlLink.Attributes.Add("rel", "stylesheet");
    myHtmlLink.Attributes.Add("screen", "screen");

    Page.Header.Controls.Add(myHtmlLink);
}

Also defining your AbsRoot_Path variable as ConfigurationManager.AppSettings["rootpath"].ToString() is a little bit redundant because ConfigurationManager.AppSettings["rootpath"] is already of type string.

Oleks
  • 31,955
  • 11
  • 77
  • 132
  • " tag and ASP.NET doesn't allow to use server-side constructs there." - I dont agree with this line because server tag working JS code which is inside Head tag and plz read my question carefully I also considered that it is working with – Govind Malviya Apr 09 '11 at 07:07
  • @Govind KamalaPrakash Malviya, please read my answer carefully too. I just meant that ASP.NET threats links inside head as a server side controls, and setting properties to them by using `<% %>` won't work. See my updated answer. – Oleks Apr 09 '11 at 07:46
  • can we use link as not server tag? Have any possibility? – Govind Malviya Apr 10 '11 at 10:05
0

You should add runat=server if you want asp.net to evaluate expressions, or it just rendered as you write... so try to add runat=server like this

<link runat=server rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />
Arsen Mkrtchyan
  • 49,896
  • 32
  • 148
  • 184