RegisterClientScriptBlock代码未执行

时间:2010-04-12 11:31:01

标签: asp.net javascript jquery

我正在使用以下代码尝试在客户端上显示包含错误列表的对话框:

    if (rollout.ImportErrors.Count > 0)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true);
    }

错误计数不为零,并且会发出以下脚本块,但脚本未执行。

<script type="text/javascript">
//<![CDATA[
$("#error-report").dialog("open")//]]>
</script>

如果我直接从Firebug控制台窗口调用该函数,则对话框显示正确,因此我知道对话框和我的代码正在运行。我究竟做错了什么?

顺便说一句,此代码位于内容页面中,使用内容占位符将代码“注入”呈现页面的元素。

3 个答案:

答案 0 :(得分:3)

我认为您应该尝试使用RegisterStartupScriptBlock而不是RegisterClientScriptBlock ...

查看解释:

RegisterClientScriptBlock会在开始标记之后立即插入脚本,而RegisterStartupScript会在结束标记之前添加脚本。

在IE中,HTML DOM以串行方式创建。因此,首先将处理您的表头信息,您的RegisterClientScript将被解析(如果不在功能块中则执行),您的表单中的控件(如文本框等)将被创建,然后您的RegisterStartupScript将被解析(和如果不在功能块中则执行。)

因此,至少在IE中,如果将代码放在RegisterStartupScript中,基本上可以保证脚本可以存在任何表单元素。相反,基本上保证您在RegisterClientScript块中的脚本不存在任何表单元素,并且代码不在功能块中。

答案 1 :(得分:0)

你需要在这种情况下包装它,如下所示:

$(function() { $("#error-report").dialog("open"); });

它只是将它放在页面中,但DOM可能还没有准备好(当你在控制台中运行它时,这就是它在那里工作的原因)。就像你直接在页面中编写脚本一样,将其包装起来,直到document.ready才会执行。

答案 2 :(得分:-1)

相关问题