jQuery与Update Panel的结合方式

3
我在使用jQuery上下文菜单和更新面板时遇到了问题。我正在使用htmlTextWriter在Customtextbox控件的RenderBeginTag中编写上下文菜单的JavaScript代码。一切正常,我可以右键单击每个文本框并显示菜单。
但是当我使用ASP.NET UpdatePanel进行部分回发时,菜单就无法显示了。似乎在部分回发发生时,jQuery和HTML之间的绑定丢失了。
有没有更好的方法来放置动态JavaScript代码而不是在RenderBeginTag中?我该如何解决这个问题?
2个回答

3

你说得对,UpdatePanel会删除你的JavaScript绑定。

在你的UpdatePanel回发中,重新注册相关的JavaScript。

像这样:

ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(typeof(Page), "ReApplyJavascript", "<script type=text/JavaScript>YourJavascriptInitMethod();</script>", false);

如果那样不起作用,您可能需要使用以下方法:
   ScriptManager.RegisterStartupScript(Page, typeof(Page), "ReApplyJavascript", "<script type=text/JavaScript>YourJavascriptInitMethod();</script>", false);

我已经尝试了它们两个,但都没有起作用。我正在将脚本放在自定义控件的RenderBeginTag中。这是正确的位置吗? - scatman
很遗憾,我对自定义控件不是很熟悉。通常我会在页面的代码后台使用这段代码,而不是在控件中使用。当您的Update Panel执行部分回发时,RenderBeginTag是否会触发? - Brandon Boone
实际上,我不会将任何脚本注册到RenderBeingTag。每次渲染控件时,我都会将它们全部注册到其中一个RegisterStartUpScript方法中。 - Brandon Boone

1

在 UpdatePanel 更新后,您需要重新初始化菜单。

<script type="text/javascript"> 
var prm = Sys.WebForms.PageRequestManager.getInstance();    
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);

function InitializeRequest(sender, args) {      
}

function EndRequest(sender, args) {
     // Here initialize the menou
}
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接