ScriptManager.RegisterClientScriptBlock 不调用现有脚本

ScriptManager.RegisterClientScriptBlock Doesn't Call Existing Script

本文关键字:脚本 调用 RegisterClientScriptBlock ScriptManager      更新时间:2023-09-26

Background

我有一个客户端按钮单击,可以触发服务器端功能。在调用服务器端函数之前,将显示加载面板 (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);
   }

问题

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

问题

我错过了什么吗?

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

更改

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()内容。