ScriptManager.RegisterClientScriptBlock 不调用现有脚本

ScriptManager.RegisterClientScriptBlock Doesn't Call Existing Script

背景

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

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

我的解决方案

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

客户端代码

我的弹出功能

    <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);
   }

问题

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

问题

有什么我遗漏的吗?

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

改变

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 将 JavaScript 代码添加到页面顶部紧跟在 ViewState 标记之后,而 RegisterClientScriptBlock 将其添加到底部。因此,如果您使用 RegisterClientScriptBlock 并且您的 PopUp() 位于页面下方的某处,您将收到错误消息。

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