Page.Header.Controls.Add(control)将控件添加到<body>而不是<head>。

4

我正在尝试在运行时向元素添加一些代码。当我在页面的用户控件上进行页面加载时,我会这样做:

HtmlGenericControl hc = new HtmlGenericControl();
hc.InnerHtml = GetParameter("HeaderCode");
Page.Header.Controls.Add(hc);

控件最终以第一个子元素的形式出现在标签中。例如:
...
</head>
<body>
<span><meta>Test</meta></span>
...

据我所知,Page.Header应该是Head元素。在aspx页面中,head元素已经设置了runat="server" 属性。

您有什么想法可以向<head>元素注入字符串吗?


在这个例子中,GetParameter 返回一个值为 "<meta>测试</meta>" 的字符串。 - James Becwar
2个回答

8

头部元素可能会对内容类型进行限制。当我们向头部注入javascript时,需要使用LiteralControl。

例如:

Page.Header.Controls.Add(New LiteralControl("<script language='javascript' type='text/javascript'>alert('test');</script>"))

这就是问题所在。当添加一个HtmlGenericControl时,它会用span标签包装起来。Chrome和IE会将span标签移动到body中,你可以查看页面源代码并检查元素。感谢您的帮助。 - James Becwar

0

尝试以下代码添加JavaScript、CSS或其他任何资源,例如元标签。我已经在我的网站上成功实现了这段代码:

HtmlGenericControl my_js = new HtmlGenericControl("script");
            my_js.Attributes["async"] = "async";
            my_js.Attributes["type"] = "text/javascript";
            my_js.Attributes["src"] = "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
            Page.Header.Controls.Add(my_js);

你需要使用命名空间: "using System.Web.UI.HtmlControls" 来使用HtmlGenericControl。


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