服务器控件在回调时失去了mousedown事件处理程序。

问题描述 投票:1回答:1

我有一个复合服务器控件,它包含一个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页面的更新面板中。

在初始页面加载后,一切都很好,但是一旦updatepanel执行回调,事件处理程序就会丢失。 我已经改变了函数,只是做了一个警告,以证明这不是函数中的代码。

服务器控件本身的声明如下。

public class myBase : CompositeControl, INamingContainer

我真的不知道为什么会发生这种情况 有什么线索吗?

javascript callback dom-events servercontrols
1个回答
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);

希望这能帮到别人!

欢呼

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.