ScriptManager.RegisterClientScriptBlock不调用现有脚本

时间:2016-11-09 12:04:16

标签: javascript c# asp.net scriptmanager

背景

我有一个客户端按钮单击,触发服务器端功能。在调用服务器端功能之前,会显示一个加载面板(div)。

服务器端功能完成后,需要删除加载面板。

我的解决方案

服务器端功能完成后,我将调用一个将删除div的JavaScript函数。所以作为测试我正在调用警报脚本。我正在尝试从母版页执行此操作。

客户端代码

我的弹出功能

    <script>
        function PopUp() {
        debugger;
        alert('TEST');
        }
     </script>

我的脚本管理器

 <asp:ScriptManager ID="ScriptManager1" runat="server">
 </asp:ScriptManager>

服务器端代码

服务器端功能完成后,

我的呼叫。

//Add the script  after <form> tag
   bool isClientScriptBlockRegistered = ClientScript.IsClientScriptBlockRegistered("ShowStatus");
   if (!isClientScriptBlockRegistered)
   {
   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ShowStatus", "PopUp();", true);
   }

问题

服务器不调用我的脚本。没有创建警报窗口。当我尝试从其工作的母版页以外的任何页面执行此操作时。但是在母版页上没有。

问题

我有什么遗失的吗?

是否需要回调或某种类型的页面刷新才能显示警报,或者服务器是否可以在没有客户端任何操作的情况下调用脚本?

1 个答案:

答案 0 :(得分:0)

更改

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ShowStatus", "PopUp();", true);

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ShowStatus", "setTimeout(function () {  PopUp(); }, 10);", true);

或进入

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "ShowStatus", "PopUp();", true);

RegisterClientScriptBlock在ViewState标记之后的页面顶部添加JavaScript代码,而RegisterClientScriptBlock将其添加到底部。因此,如果您使用RegisterClientScriptBlock并且您的PopUp()位于页面较低的位置,则会收到错误。

或者通过设置setTimeout,您可以确保生成所有内容,然后即使脚本块位于顶部,也会找到PopUp()