无法在aspx页面的<head>部分使用Response.Write?

6
我正在尝试使用Response.Write()方法在aspx页面的部分动态插入内容。我需要注入来自代码后台对象属性的字符串值,该字符串是指向我的CSS文件的链接。然而,在运行时它没有被正确处理。该对象在类上是公共的,并且在Page_Load()事件中填充。在页面主体下方,我可以成功地注入其他Corpoartion对象的属性,没有任何问题。
为什么这在部分不起作用?
这是未正确展开的部分:
<link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />

以下是整个< head >部分:

<head runat="server">
    <title></title>
    <link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />
    <script language="JavaScript" type="text/JavaScript" src="cntv_menu.js"></script>
    <script language="JavaScript" type="text/JavaScript" src="cntv_category.js"></script>   
</head>

这个问题不能正确地展开的原因是什么?

如果其他人也遇到了这个问题,那么接受的答案有一个小错误:"<%= %>"可以在"<head runat="server">"元素内使用,我经常用它来注释、设置"<title>"和"<script>"变量(只有"<link>"和"<meta>"元素已知存在问题)。我只需要给"<link>"元素添加一个ID属性,然后在代码后台设置href属性即可。 - JayRO-GreyBeard
4个回答

6
您不能在runat="server"标记中使用<%= %>,而您的<head>标记是这种类型的标记。
您可以将其更改为<%# %>并在代码后台绑定数据,或者您可以使链接标记runat="server",给它一个id并从代码后台分配属性。
请参见此答案,其中详细讨论了此问题。

谢谢。你让我继续下去了。<head>已经有runat="server",所以我不需要将其添加到链接中,但我给链接添加了id="csslink",然后在代码后台中调用csslink.DataBind()。效果非常好! - MattSlay
我意识到这已经过去将近十年了,但我偶然发现并认为值得注意的是,在服务器控件(例如在<head runat="server" />中)的引号标识符内部不能使用<%# … %>。在这些情况下 - 尽管如果您考虑声明性语法作为HTML元素时似乎不符合直觉 - 您必须删除属性引号。例如,<link href=<%# Corporation.PageStyleSheet %> rel="stylesheet" type="text/css" />。这仍将呈现带有属性值周围的引号。 - Jeremy Caney

0

解决这个问题的最佳方法是使用OnPreRender

示例:

首先,定义您的标签:

<link href="~/css/your_default.css" type="text/css" runat="server" id="myCSS" />

并且在 OnPreRender 中:

protected override void OnPreRender(EventArgs e){
     base.OnPreRender(e);
     myCSS.Attributes["href"] = "~/css/your_new.css";
}

0

使用这个:

this.myButton.Attributes.Add(attribute, value);

这对我有用 :)


-1
如果你将整行代码都写出来,你应该就没问题了。
<%
Response.write("<link href=\"" + Corporation.PageStyleSheet + "\" rel=\"stylesheet\" />");
%>

附言:我的语法可能不完全正确,请事先谅解。


这个方法行不通的原因和 <%= %> 一样。在 runat=server 控件中的代码只会被解析为服务器控件树。 - Richard Szalay
很好的创意,有点超越常规思维,但是正如所述,它仍然无法运行。抱歉,伙计。 - MattSlay
很奇怪,因为我已经在 head runat="server" 中让它工作了。ASP.NET 的 runat Server 和 MVC 的运行方式不同吗?还是因为我的 head 部分位于 masterpage 中,有人知道吗? - Luke Duddridge
请注意,不应在ASP.NET MVC中使用head runat =“server”,因为这样做会混合控件层次结构(WebForms)和MVC。 - Richard Szalay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接