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 页面上的更新面板中。

初始页面加载后一切正常,但一旦更新面板执行回调,事件处理程序就会丢失。我已将函数更改为仅发出警报以证明它不是函数中的任何代码。

服务器控件本身声明如下:

public class myBase : CompositeControl, INamingContainer

我真的不知道为什么会这样……有什么线索吗?

4

1 回答 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);

希望能帮助别人!

干杯

于 2009-09-16T10:40:28.420 回答