Хаос при неправильном написании писателю во время метода Render ()

Не могли бы кто-нибудь объяснить, что здесь происходит.

У меня следующая разметка :

<html>
<head runat="server">
    <title>My title</title>
    <my:MyControl runat="server" ID="myControl" />
</head>
...

Мой настраиваемый элемент управления выглядит примерно так:

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

Когда страница отображается, вся верхняя половина головы обрезается, поэтому HTML-код отображается следующим образом:

<html>
    <script>this is my script</script>
</head>

Решение состоит в вызове writer.Write. после base.Render, вот так:

base.Render(writer);
writer.Write("<script>this is my script</script>");

Почему?!

ОБНОВЛЕНИЕ

Я удивлен, насколько интересен этот вопрос!

Я выяснил, почему верхняя часть моего тега заголовка была удалено - это была ошибка HttpHandler, который я использую для «очистки» html (он перемещает скрипты вниз и т. д.).

Это все еще не объясняет, почему изменение порядка метода рендеринга может вызвать ошибку исчезнут, но я уверен, что всему этому есть логическое объяснение!

12
задан cbp 1 July 2011 в 02:31
поделиться