ScriptManager.RegisterStartupScript On Button Click(在更新面板中)第
本文关键字:更新 On RegisterStartupScript Button Click ScriptManager | 更新日期: 2023-09-27 18:25:45
我的项目本质上是一个带有菜单和更新面板的网页。用户从菜单中选择一个选项,然后将一个用户控件加载到更新面板中。我不想使用更新面板,但是,有多个数据绑定控件,它们包含的信息将更改另一个数据绑定控制器的内容。无论如何,我的项目需要在屏幕上显示一个消息框,我在开始工作时没有问题:
string s= "<script>alert('HayGuise');</script>";
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false);
现在,我尝试了许多不同的策略,包括用静态字符串替换GUID;我使用过RegisterStartupScript等。我的问题是,在更新面板更新为显示新的用户控件后,第一次单击调用按钮时不会显示消息框。但是,如果我再次点击按钮,一切都很好。如果这是在加载到更新面板的第一个表单上完成的(打开网站并从菜单中进行选择),那么一切都很好;只有当updatepanel使用新表单再次更新时,才会发生这种情况,而且只有在第一次单击时才会发生。
此外,代码正在被激发,ScriptManager代码之后的所有代码都会被激发,但在再次单击按钮之前,消息框不会显示。当我现在测试这种行为时,我已经将弹出代码添加到表单上的每个按钮中,并且每个按钮的行为都是相同的。糟糕的是,花了这么长时间来实现一段可靠的代码(用于消息框),却出现了这个小问题,而这是在我刚刚弄清楚为什么我的按钮事件在一次点击中触发了两次之后。我敢肯定,这将是一个简单的东西,某种我不熟悉的属性,需要正确设置。该死,我希望能够解决所有这些小问题,这样我就可以继续进行项目的其余部分了。Sooooo关闭。谢谢你的帮助。
编辑:此外,按钮位于另一个用户控件中,该控件添加到更新面板中显示的用户控件窗体中。
编辑II:感谢您的意见,我很抱歉这么晚才回到这里,我转到了项目的其他部分,刚刚回到这里。问题不在于startupscript方法,也不在于clientscriptblck方法;问题在于回发时值/viewstate/clientid的丢失。
在我发布这个问题的时候,这个项目是一个单页的应用程序。我通过创建一个多页应用程序来测试功能,并一直坚持下去,发誓要回到这个问题上来。好吧,我回来了,问题不在更新面板中,它与我的代码有关,因为我清除了更新面板(也尝试了使用常规面板),然后重新加载新的用户控件。清除后,某些东西会失控,第一次回邮时不会有任何东西着火。这是一个奇怪的问题,我还没有找到太多(几篇文章)关于导致这个问题的第一次回发的信息。如果我找到答案,我会更新答案;我找到的唯一修复方法是在菜单选择代码Server.Transfer(当前页面)中添加一行,基本上是刷新页面。这解决了所有的问题,但似乎有点低级趣味。再次感谢您的意见。
如果您正在使用AJAX UpdatePanel,下面的代码应该适合您。在我的情况下,我使用的是更新面板,除了这一个,其他的都不起作用。
ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true);
如果您在页面中使用更新面板,那么以下代码应该适用于您。您应该使用"this"在整个页面中使用RegisterStartupScript。ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunction", "myFunction();", true);