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

时间:2009-09-14 13:58:38

标签: javascript-events callback servercontrol

我有一个复合服务器控件,其中包含一个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

我真的不知道为什么会发生这种情况......任何线索?

干杯

1 个答案:

答案 0 :(得分: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);

希望能帮助其他人!

干杯