我正在使用Web用户控件(.ascx),它将包含在常规Web表单(.aspx)中,但我需要能够动态地将代码插入到文档的头部。用户控制。在我的Coldfusion日子里< cfhtmlhead>会做的伎俩。在ASP.NET或类似的黑客中是否存在相同的内容?
答案 0 :(得分:32)
要添加HTML标记,您可以执行以下操作:
在UserControl的代码中,您可以访问Page.Header,它本身就是一个控件。然后,您可以在该控件中添加新控件:
HtmlGenericControl newControl = new HtmlGenericControl("someTag");
newControl.Attributes["someAttr"] = "some value";
Page.Header.Controls.Add(newControl);
要添加脚本标记,您根本不需要访问head标记,因为ASP.NET在ClientScriptManager上有帮助方法,可以为您完成工作:
以下是您可以在用户控件代码中添加的一些代码的示例:
// Register some inline script:
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true);
// Register a script reference:
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js");
答案 1 :(得分:13)
我意识到这是一个老问题,但这是另一个例子。
试试这个:
Page.Header.Controls.Add(
new LiteralControl(
"<script>alert('Literal Added to <Head>.');</script>"
)
);
如果要在<head>
的特定索引处添加脚本,可以使用
AddAt(index, new LiteralControl(...))
其中索引0等于<head>
此外,您需要在头标记中添加runat="server"
,例如<head id="head1" runat="server">
答案 2 :(得分:9)
this.Page.Header.Controls.Add
通过执行此操作,您将向头部添加控件。您可以添加任何类型的控件。如果您觉得需要添加简单文本(或者您想手动编写代码),请查看LiteralControl类。
答案 3 :(得分:2)
有一些关于使用C#代码修改页眉here的指导。它应该可以在页面加载完成之前执行的任何服务器端代码中正常工作。
一个简单的例如。
HtmlHead head = Page.Header;
HtmlTitle title = new HtmlTitle();
title.Text = "Test Page";
head.Controls.Add(title);
HTMLHead引用位于命名空间
中System.Web.UI.HtmlControls
覆盖自定义控件的Load()方法,在服务器端加载父.aspx页面时,将所需的控件或引用添加到页眉中。
答案 4 :(得分:0)
我有一个简单的解决方案。基于页面的URL(作为键)创建运行时内存缓存,该URL包含关于y的x信息(无论是文件引用,脚本文本还是生成JavaScript的类),并将其数据序列化为JSON。 Newtonsoft对任何类的实例都很有帮助。实际上,您可以使用它的输出来根据给定的输入初始化类的任何新实例。在某种程度上,这意味着您可以自动实例化任何特定类的实例,尽管实例所使用的是用户控件。最后,您将创建一个简单的Web表单作为脚本引用和最终端点。它会提取JavaScript(或它的内容)并将头部标记内的脚本引用作为客户端代码吐出。