我有一个复合服务器控件,它包含一个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
我真的不知道为什么会发生这种情况 有什么线索吗?
好吧,我解决了...
看来我使用的方法是错误的,所以我把它改成使用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);
希望这能帮到别人!
欢呼