【问题标题】:Can I modify the <head/> section of a Page in .NET from a User Control without runat="server"?我可以在没有 runat="server" 的情况下从用户控件修改 .NET 中页面的 <head/> 部分吗?
【发布时间】:2011-10-04 17:25:47
【问题描述】:

我有一个没有在&lt;head/&gt; 部分设置runat="server" 的页面。我无权修改页面中的任何代码。

此页面包含我有权访问的用户控件。我可以从用户控件将&lt;meta/&gt; 标记添加到页面的头部吗?它需要是服务器端的,因此 javascript 解决方案将不起作用。

【问题讨论】:

  • 如果它没有被标记为runat="server" 可能不容易。 ASP.NET 将第一个控件之前的整个部分视为需要连接以生成最终输出的单个字符串。
  • 你可以随时使用javascript
  • 在隐藏字段中传递数据并在页面加载时使用 javascript 更新元数据
  • 看看this 问题(和接受的答案)。 JavaScript 可能是要走的路。
  • 是的,我知道 js 解决方案。不幸的是,我不能在我的特殊情况下使用 javascript。不过还是谢谢。

标签: c# .net user-controls metadata


【解决方案1】:

一种选择是创建一个响应过滤器,然后在将输出发送给用户之前对其进行修改。

http://www.4guysfromrolla.com/articles/120308-1.aspx

【讨论】:

  • 这比我的方法好得多。但是,从控件内部添加响应过滤器会很快导致代码难以维护。
【解决方案2】:

你可以解析里面的文字

(this.Page.Controls[0] as LiteralControl).Text

查看字符串&lt;head&gt; 的开始位置,并在其中插入您需要的任何文本,从而将您自己的代码注入页眉,而不用标记runat="server"

但请注意,这是将代码放在最可能不应该出现的位置的一种非常老套的方法(否则 &lt;head&gt; 元素将被标记为 runat="server",因此您可以正常访问它) .如果稍后将 head 元素更改为 ASP.NET 控件,这也会中断。它可能不适用于母版页,您必须沿着控制树向上寻找最顶层的文字元素。

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2011-03-18
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多