我正在绑定(bind)类似于 标记中的路径
<link rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />
但它渲染成这样......
<link rel="stylesheet" media="screen" href="<%= ConfigurationManager.AppSettings["rootpath"].ToString() %>UserAccountTemp/css/reset.css" />
并且它正在工作 <script> 标记。
这背后的原因是什么以及解决方案是什么?
更新
设置AbsRoot_Path
在 web.config 中
<add key="rootpath" value="http://localhost:1259/WallProfile/"/>
并设置为 AbsRoot_Path
public string AbsRoot_Path = ConfigurationManager.AppSettings["rootpath"].ToString();
最佳答案
编辑:好的,我会在这里更具体。
ASP.NET 对待 <link>
里面<head>
作为服务器端控件,即使您没有指定 runat="server"
属性在那里。所以你实际上是在设置服务器端控件的“href”属性,这就是为什么你会得到如此奇怪的值。因此解决方法可以是添加 id
属性为<link>
并访问服务器端:
<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";
}
或使用我在最初的答案中提供的解决方案:
看来你定义了你的 <link>
<head>
内的标签标记和 ASP.NET 不允许在那里使用服务器端构造。但有一个简单的解决方法:您可以添加 <link>
以编程方式控制(为此使用 HtmlLink
服务器端控制):
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);
}
同时定义您的AbsRoot_Path
变量为ConfigurationManager.AppSettings["rootpath"].ToString()
有点多余,因为 ConfigurationManager.AppSettings["rootpath"]
已经是 string
类型.
关于asp.net - 表达式标签绑定(bind)字符串变量时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603086/