ScriptManager.RegisterClientScriptBlock 不调用现有脚本
ScriptManager.RegisterClientScriptBlock Doesn't Call Existing Script
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()
内容。
相关文章:
- 从 java 脚本调用函数时 PHP 中出错
- 从不同的脚本调用Post AngularJs
- 多个“;脚本调用"在SINGLE”内$(文档).ready()”;
- 如何使用webbrower对象中的脚本调用C#事件
- 从Java脚本调用C#代码隐藏代码
- 当我使用java脚本调用web服务时,模拟器上没有得到响应
- 使用 jQuery getScript 从 PHP 脚本调用 JavaScript 函数
- 将注入的按钮从内容脚本调用到后台.js
- 从 Java 脚本调用 Java 方法
- 在 sharepoint 环境中使用脚本调用 lists.asmx Web 服务
- 从 php 脚本调用 javascript 问题
- 使用 AJAX 从 Java 脚本调用 RestfulWebService
- Ajax 从本地 js 脚本调用本地 Phantom.js 服务器
- 从 java 脚本调用参数化 ms-access 函数的语法是什么?
- JavaScript 加载其他脚本 - 调用函数 - 未定义
- 从 JavaScript 脚本调用 PHP 函数
- 从 PHP 脚本调用节点
- 从内联脚本调用coffeescript中的函数
- HTML选择标记值在从脚本调用函数后不会立即更改
- 在进行脚本调用后,Css未正确呈现属性