我有一个客户端按钮单击,触发服务器端功能。在调用服务器端功能之前,会显示一个加载面板(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);
}
服务器不调用我的脚本。没有创建警报窗口。当我尝试从其工作的母版页以外的任何页面执行此操作时。但是在母版页上没有。
我有什么遗失的吗?
是否需要回调或某种类型的页面刷新才能显示警报,或者服务器是否可以在没有客户端任何操作的情况下调用脚本?
答案 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()
。