ScriptManager.RegisterStartupScript On按钮单击(在updatepanel内)不会在第一次单击时触发

时间:2013-07-30 22:34:12

标签: c# javascript asp.net updatepanel

我的项目本质上是一个带有菜单和更新面板的网页。用户从菜单中选择一个选项,并将用户控件加载到更新面板中。我宁愿不使用更新面板,但是,有多个数据绑定控件包含信息,然后将更改另一个数据绑定控件的内容。无论如何,我的项目要求在屏幕上显示一个消息框,这对我开始工作没有任何问题:

string s= "<script>alert('HayGuise');</script>";
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false);

现在,我尝试了许多不同的策略,包括用静态字符串替换GUID;我已经使用了RegisterStartupScript等。我的问题是,在更新面板更新后显示新的用户控件后,第一次单击调用按钮时,消息框不显示。但是,如果我再次点击按钮,一切都很棒。如果这是在加载到updatepanel的第一个表单上完成的(打开网站并从菜单中选择),一切正常;只有当updatepanel再次使用新表单更新时,才会发生这种情况,并且只会在第一次单击时再次发生。

此外,代码被触发,并且跟随ScriptManager代码的所有代码都会触发,但在再次单击该按钮之前,消息框将不会显示。当我正在测试此行为时,我已将弹出代码添加到表单上的每个按钮,并且每个按钮的行为都相同。很糟糕的是,实现一段可靠的代码(对于消息框)需要很长时间才能解决这个问题,而这只是在我弄清楚为什么我的按钮事件在单击时触发两次之后。我很确定它会变得简单,某种我不熟悉的属性需要正确设置。该死的,我很想能够解决所有这些小问题,所以我可以继续完成项目的其余部分。 Sooooo关闭。谢谢你的帮助。

编辑:此外,这些按钮位于另一个用户控件中,该控件将添加到updatepanel中显示的usercontrol表单中。

编辑II: 感谢您的投入,我为这么晚回到这里感到抱歉,我转到项目的其他部分,然后回到这里。问题不是startupscript方法,也不是clientscriptblck方法;问题在于在回发时丢失值/ viewstate / clientid。

在我发布此问题时,此项目是单页面应用程序。我通过创建多页面应用程序来测试功能,并且只是继续从那里开始,发誓要回到这个问题。好吧,我回来了,问题不在于更新面板,它与我的代码有关,因为我清除了更新面板(也尝试使用常规面板),然后重新加载新的usercontrol。一旦被清除,一些东西就会变得混乱,第一次回发就什么都没有了。这是一个奇怪的问题,我还没有找到很多(几篇文章)的信息,这只是导致这个问题的第一个回发。如果我找到答案,我会更新答案;我发现的唯一修复是在菜单选择代码Server.Transfer(thecurrentpage)中添加一行,基本上刷新页面。这解决了所有问题,但似乎有点不好的味道。再次感谢您的意见。

2 个答案:

答案 0 :(得分:0)

如果您正在使用AJAX UpdatePanel,以下代码应该适合您。在我的情况下,我使用的是更新面板,除了这个之外没有任何工作。

ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true);

答案 1 :(得分:0)

如果您在页面中使用更新面板,则以下代码应该适合您。您应该使用“this”在整个页面中使用RegisterStartupScript。ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunction", "myFunction();", true);

相关问题