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="<%= ConfigurationManager.AppSettings["rootpath"].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();
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
.
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' />
来源:https://stackoverflow.com/questions/5603086/problem-in-expression-tag-to-bind-string-variable