在Render()方法中错误地写入writer时出现混乱

cbp*_*cbp 12 .net c# asp.net render

有人可以解释一下这里发生了什么.

我有以下标记:

<html>
<head runat="server">
    <title>My title</title>
    <my:MyControl runat="server" ID="myControl" />
</head>
...
Run Code Online (Sandbox Code Playgroud)

我的自定义控件是这样的:

public MyControl : Control
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write("<script>this is my script</script>");
        base.Render(writer);
    }
}
Run Code Online (Sandbox Code Playgroud)

渲染页面时,整个头部的上半部分被切掉,所以html呈现如下:

<html>
    <script>this is my script</script>
</head>
Run Code Online (Sandbox Code Playgroud)

解决方法是在base.Render之后调用writer.Write,如下所示:

base.Render(writer);
writer.Write("<script>this is my script</script>");
Run Code Online (Sandbox Code Playgroud)

为什么?!

UPDATE

我对这个问题的兴趣感到惊讶!

我发现为什么我的头标记的顶部被移除 - 这是一个HttpHandler的错误,我用来'清理'html(它将脚本移动到底部等).

这仍然无法解释为什么更改渲染方法的顺序会导致错误消失,但我确信这一切都有合理的解释!

Adr*_*ian 1

您只是用从函数返回的内容覆盖您的正文内容:

<script>this is my script</script>
Run Code Online (Sandbox Code Playgroud)

  • 没有发生“覆盖”。 (3认同)