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();
6
  • The code that is setting the AbsRoot_Path is not correct. Commented Apr 9, 2011 at 5:31
  • Show me the code that sets AbsRoot_Path. I will bet that it has some misplaced quotes. Commented Apr 9, 2011 at 6:07
  • I write the code in my question... see first line. Commented Apr 9, 2011 at 6:10
  • No you haven't. Where is the code that sets the variable AbsRoot_Path. You are only showing the code that uses the variable NOT the code that asssigns a value to it. Commented Apr 9, 2011 at 6:13
  • ohhk.. sorry! see question again now I updated... Commented Apr 9, 2011 at 6:18

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

3 Comments

"<head> 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 <script> tag.
@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.
can we use link as not server tag? Have any possibility?
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' />

1 Comment

is the same thing rendered when you add runat=server?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.