Expression语句中的问题绑定字符串变量

时间:2011-04-09 05:25:45

标签: asp.net server-tags

我是< link>中的绑定路径标签

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

但它会像那样......

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

它正在工作&lt; script&gt;标签

这背后的原因是什么,解决方案是什么?

更新

设置AbsRoot_Path

web.config中的

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

并设置为AbsRoot_Path

public string AbsRoot_Path = ConfigurationManager.AppSettings["rootpath"].ToString();

2 个答案:

答案 0 :(得分:5)

编辑:好的,我会在这里更具体。

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类型。

答案 1 :(得分:0)

如果你想让asp.net评估表达式,你应该添加runat = server,或者只是在你写的时候渲染...所以尝试添加runat = server这样

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