1

Renderメソッドで右クリックイベントハンドラーをアタッチするdivを含む複合サーバーコントロールがあります(わかりやすくするために簡略化されています)。

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

なぜこれが起こっているのか、私は本当に途方に暮れています...何か手がかりはありますか?

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 に答える