【问题标题】:Problem in Expression tag to bind string variable表达式标签中绑定字符串变量的问题
【发布时间】:2011-04-09 05:25:45
【问题描述】:

我在标签中绑定路径

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

它正在工作

这是什么原因,解决办法是什么?

更新

设置 AbsRoot_Path

在 web.config 中

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

并设置为 AbsRoot_Path

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

【问题讨论】:

  • 设置 AbsRoot_Path 的代码不正确。
  • 显示设置 AbsRoot_Path 的代码。我敢打赌它有一些错位的引号。
  • 我在我的问题中编写代码...见第一行。
  • 不,你没有。设置变量 AbsRoot_Path 的代码在哪里。您只显示使用变量的代码而不是为其分配值的代码。
  • 哦……对不起!现在再次查看问题我更新了...

标签: asp.net server-tags


【解决方案1】:

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

ASP.NET 将&lt;head&gt; 内的&lt;link&gt; 视为服务器端控件,即使您没有在其中指定runat="server" 属性。所以你实际上是在设置服务器端控件的'href'属性,这就是为什么你在那里得到如此奇怪的值。所以解决方法可以是为&lt;link&gt; 添加id 属性并在服务器端访问它:

<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";
}

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

您似乎在 &lt;head&gt; 标记内定义了您的 &lt;link&gt; 标记,而 ASP.NET 不允许在那里使用服务器端构造。但是有一个简单的解决方法:您可以通过编程方式添加&lt;link&gt; 控件(为此使用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 不允许在那里使用服务器端构造。" - 我不同意这一行,因为服务器标签工作的 JS 代码位于 Head 标签内,请仔细阅读我的问题,我还认为它正在使用
  • @Govind KamalaPrakash Malviya,也请仔细阅读我的回答。我只是说 ASP.NET 威胁作为服务器端控件在 head 内部链接,并且使用 &lt;% %&gt; 为它们设置属性将不起作用。请参阅我的更新答案。
  • 我们可以使用链接作为非服务器标签吗?有没有可能?
【解决方案2】:

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

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

【讨论】:

  • 添加runat=server时渲染的内容是一样的吗?
猜你喜欢
  • 2011-04-13
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2011-09-25
  • 2021-03-03
  • 2022-06-24
  • 1970-01-01
相关资源
最近更新 更多