Управление сервером теряет обработчик событий 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);
Надеюсь, что это поможет кому-то еще!
ура