我有一个复合服务器控件,其中包含一个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
我真的不知道为什么会发生这种情况......任何线索?
干杯
答案 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);
希望能帮助其他人!
干杯