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

Gov*_*iya 2 asp.net server-tags

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

<link rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />
Run Code Online (Sandbox Code Playgroud)

但它像那样呈现......

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

它正在运行<script>标签.

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

UPDATE

设置AbsRoot_Path

在web.config中

<add key="rootpath" value="http://localhost:1259/WallProfile/"/>
Run Code Online (Sandbox Code Playgroud)

并设置为AbsRoot_Path

public string AbsRoot_Path = ConfigurationManager.AppSettings["rootpath"].ToString();
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 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";
}
Run Code Online (Sandbox Code Playgroud)

或者使用我在初始答案中提供的解决方案:

您似乎在<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);
}
Run Code Online (Sandbox Code Playgroud)

同样将AbsRoot_Path变量定义为ConfigurationManager.AppSettings["rootpath"].ToString()有点多余,因为ConfigurationManager.AppSettings["rootpath"]它已经是类型string.