我正在使用以下代码尝试在客户端上显示包含错误列表的对话框:
if (rollout.ImportErrors.Count > 0)
{
ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true);
}
错误计数不为零,并且会发出以下脚本块,但脚本未执行。
<script type="text/javascript">
//<![CDATA[
$("#error-report").dialog("open")//]]>
</script>
如果我直接从Firebug控制台窗口调用该函数,则对话框显示正确,因此我知道对话框和我的代码正在运行。我究竟做错了什么?
顺便说一句,此代码位于内容页面中,使用内容占位符将代码“注入”呈现页面的元素。
答案 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)