0

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

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

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

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

编辑:此外,按钮位于另一个用户控件中,该用户控件添加到更新面板中显示的用户控件表单中。

编辑二:感谢您的意见,我很抱歉这么晚才回来,我转到项目的其他部分,然后才回来。问题不是 startupscript 方法,也不是 clientscriptblck 方法;问题在于回发时价值/视图状态/客户端ID的丢失。

在我发布这个问题时,这个项目是一个单页应用程序。我通过创建一个多页应用程序来测试功能,并从那里继续前进,发誓要回到这个问题上。好吧,我回来了,问题不在更新面板中,它与我的代码有关,因为我清除了更新面板(也尝试使用常规面板),然后重新加载新的用户控件。清除后,有些事情变得混乱,并且在第一次回发时没有任何反应。这是一个奇怪的问题,我还没有找到很多(几篇文章)关于这只是导致这个问题的第一个回发的信息。如果我找到答案,我会更新答案;我发现的唯一解决方法是在菜单选择代码 Server.Transfer(thecurrentpage) 中添加一行,本质上是刷新页面。这解决了所有问题,但它似乎有点糟糕。再次感谢您的输入。

4

2 回答 2

0

如果您使用 AJAX UpdatePanel,以下代码应该适合您。就我而言,我使用的是更新面板,除了这个之外,没有一个关于工作的。

ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true);
于 2015-06-11T05:57:32.387 回答
0

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

于 2017-04-07T05:21:19.137 回答