Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ScriptManager.RegisterStartupScript在按钮单击时(在updatepanel中)不会在第一次单击时触发_C#_Javascript_Asp.net_Updatepanel - Fatal编程技术网

C# ScriptManager.RegisterStartupScript在按钮单击时(在updatepanel中)不会在第一次单击时触发

C# ScriptManager.RegisterStartupScript在按钮单击时(在updatepanel中)不会在第一次单击时触发,c#,javascript,asp.net,updatepanel,C#,Javascript,Asp.net,Updatepanel,我的项目本质上是一个带有菜单和updatepanel的网页。用户从菜单中选择一个选项,并将usercontrol加载到updatepanel中。我不希望使用更新面板,但是,有多个数据绑定控件,其中包含的信息将更改另一个数据绑定控件的内容。无论如何,我的项目要求在屏幕上显示一个消息框,我在开始工作时没有问题: string s= "<script>alert('HayGuise');</script>"; ScriptManager.RegisterClientScript

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

string s= "<script>alert('HayGuise');</script>";
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false);
string s=“警报('HayGuise');”;
ScriptManager.RegisterClientScriptBlock(c.Page,c.Page.GetType(),GUID.NewGUID().ToString(),s,false);
现在,我尝试了许多不同的策略,包括用静态字符串替换GUID;我使用过RegisterStartupScript等。我的问题是,在updatepanel更新为显示新的usercontrol后,第一次单击call按钮时,消息框不会显示。但是,如果我再按一下按钮,一切都很好。如果这是在加载到updatepanel的第一个表单上完成的(打开站点并从菜单中选择),那么一切都可以正常工作;只有当updatepanel使用新表单再次更新时,才会发生这种情况,并且仅在第一次单击时才会发生

此外,正在激发代码,并且会激发ScriptManager代码后面的所有代码,但在再次单击按钮之前,消息框不会显示。当我正在测试这个行为时,我已经将弹出代码添加到表单上的每个按钮中,每个按钮的行为都是相同的。糟糕的是,花了这么长时间才实现了一段可靠的代码(对于messagebox),却出现了这个小问题,而这是在我刚刚弄清楚为什么我的按钮事件在一次单击中触发了两次之后。我很确定它将是一些简单的东西,一些我不熟悉的属性,需要正确设置。妈的,我很想解决所有这些小问题,这样我就可以继续项目的其余部分了。太接近了。谢谢你的帮助

编辑:此外,按钮位于另一个usercontrol中,该usercontrol添加到updatepanel中显示的usercontrol表单中

编辑二: 谢谢你的意见,我很抱歉这么晚才回到这里,我转到了项目的其他部分,然后又回到这里。问题不是startupscript方法,也不是clientscriptblck方法;问题在于回发时丢失了value/viewstate/clientid


在我发布这个问题时,这个项目是一个单页应用程序。我通过创建一个多页应用程序来测试功能,并一直坚持下去,发誓要回到这个问题上来。好吧,我回来了,问题不在更新面板中,它与我的代码有关,因为我清除了更新面板(也尝试了常规面板),然后重新加载新的usercontrol。清除后,有些东西会失控,并且在第一次回发时没有任何东西触发。这是一个奇怪的问题,我还没有找到太多(几篇文章)的信息是专门针对第一次回发导致这个问题。如果我找到答案,我会更新答案;我发现的唯一修复方法是在菜单select code,Server.Transfer(当前页面)中添加一行,本质上是刷新页面。这解决了所有的问题,但它似乎有点低级趣味。再次感谢您的输入。

如果您正在使用AJAX UpdatePanel,下面的代码应该适合您。在我的例子中,我使用的是更新面板,除了这一个,所有的都不起作用

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

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

所有浏览器都有相同的问题吗?没错,当你调用ScriptManager.RegisterClientScriptBlock(..)时,在IE8和Firefox上测试,同样的问题。单击按钮调用它,在DisplayMessage(控件c,字符串消息)中调用它,并且它只有上面的两行代码(而不是'HayGuise',它将是“+message+”)。如果你在这个方法的第一个括号上放置一个断点,它会在第一时间触发吗?否则,我认为您的问题在页面的其他地方,您输入的代码是正确的(我也使用它)。在任何情况下,我可以发布更多的代码吗?例如:完整方法、更新面板的开始标记等。