Problem in Expression tag to bind string variable

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" rel="nofollow noreferrer noopener" />

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();

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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.

Method 2

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' />


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x