Управление сервером теряет обработчик событий mousedown при обратном вызове

У меня есть составной серверный элемент управления, который содержит div, к которому я присоединяю обработчик события щелчка правой кнопкой мыши в методе Render (упрощено для ясности):

protected override void Render(HtmlTextWriter writer)
{
    base.Render(writer);

    writer.write(@"
    <script type=""text/javascript"">
    document.getElementById(""myDiv"").onmousedown = function(event)
    {
        e = FixupMouse(event);
        if (e.which == 3)
           // Do my stuff
    }
    </script>
    ";
}

Серверный элемент управления размещен на панели обновлений на странице aspx.

После начальной загрузки страницы все хорошо, но как только панель обновления выполняет обратный вызов, обработчик событий теряется. Я изменил функцию, чтобы просто сделать предупреждение, чтобы доказать, что это не код в функции.

Сам серверный элемент управления объявлен со следующим:

public class myBase : CompositeControl, INamingContainer

Я действительно в недоумении, почему это происходит... какие-либо подсказки?

ура

1 ответ

Решение

Хорошо, я отсортировал это...

Казалось бы, метод, который я использовал, был неправильным, поэтому я изменил его на статический метод ScriptManager RegisterStartupScript и переместил его в OnPreRender следующим образом:

String script = @"
document.getElementById(""myDiv"").onmousedown = function(event)
{
    e = FixupMouse(event);
    if (e.which == 3)
        //... do stuff
};");

ScriptManager.RegisterStartupScript(this, this.GetType(), String.Format("{0}_MouseDown", this.ClientID), script, true);

Надеюсь, что это поможет кому-то еще!

ура

Другие вопросы по тегам