2

我有一个带头的 aspx 页面

<head runat="server" id="head">
    <title></title>
</head>

现在我正在处理的站点正在从 xml 文件中提取信息,我想从 xml 文件中获取一个节点并将其附加到 head 部分。

 <head runat="server" id="head">
        <title></title>
        <script></script> // comes from the xml file
    </head>

但是,当我尝试其中任何一个时。

  protected void Page_Init(object sender, EventArgs e)
    {


        this.Page.Header.InnerHtml += xml.Header; // errors out
        this.Page.Header.InnerHtml = this.Page.Header.InnerHtml + xml.Header; // errot ut

    }

它出错了

System.Web.HttpException 未被用户代码处理 Message=Cannot get inside content of head 因为内容不是文字。

如果我这样做

protected void Page_Init(object sender, EventArgs e)
        {


            this.Page.Header.InnerHtml = xml.Header; 


        }

一切皆好。

如果我这样做

<head runat="server" id="head">
   // removed the title tag so now nothing is in head
</head>

然后这样做

protected void Page_Init(object sender, EventArgs e)
        {


            this.Page.Header.InnerHtml += xml.Header; // works
            this.Page.Header.InnerHtml = this.Page.Header.InnerHtml + xml.Header; //works

        }

有用。所以我不确定为什么当头部已经有标签时它会失败。

如果我也尝试从头部获取内容,我也会得到同样的错误

 var a = this.Page.Header.InnerHtml;
var a = this.Page.Header.InnerText;
4

3 回答 3

1

此问题可能是由于 head 标记与其中的 script 标记一起呈现的方式

也可能是页面渲染得太快了

我建议您在页面获取 Page_PreRender 事件时尝试在 head 标记中插入脚本标记

于 2012-07-23T17:40:21.567 回答
1

您可以使用 (VB) 完成此操作:

    Dim sw As New StringWriter()
    Dim w As New HtmlTextWriter(sw)
    NameOfYourElementID.RenderControl(w)
    Dim s As String = sw.GetStringBuilder().ToString()

现在您可以使用变量 's' 对其进行任何操作。

不要忘记导入 System.IO 来完成这项工作。

于 2012-11-12T14:33:38.060 回答
0

问题出在使用 MasterPage 时。this.Page.Header.InnerHtml 不起作用

于 2013-03-27T21:50:34.780 回答