2

我在 <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" />

它正在工作 <script> 标签。

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

更新

设置 AbsRoot_Path

在 web.config 中

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

并设置为 AbsRoot_Path

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

2 回答 2

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变量 asConfigurationManager.AppSettings["rootpath"].ToString()有点多余,因为ConfigurationManager.AppSettings["rootpath"]它已经是 type string

于 2011-04-09T06:57:59.723 回答
0

如果您希望 asp.net 评估表达式,则应该添加 runat=server,或者它只是在您编写时呈现...所以尝试像这样添加 runat=server

<link runat=server rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />
于 2011-04-09T05:33:04.873 回答