我使用以下代码来尝试在客户端显示一个带有错误列表的对话框:
if (rollout.ImportErrors.Count > 0)
{
ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true);
}错误计数为非零,并发出以下脚本块,但脚本没有执行。
<script type="text/javascript">
//<![CDATA[
$("#error-report").dialog("open")//]]>
</script>如果我直接从Firebug控制台窗口调用该函数,对话框将正确显示,因此我知道该对话框和我的代码正在工作。我做错了什么?
顺便说一句,这段代码在内容页面中,使用了一个内容占位符,该占位符将代码“注入”到呈现页面的元素中。
发布于 2010-04-12 19:35:20
我认为你应该尝试RegisterStartupScriptBlock而不是RegisterClientScriptBlock...
请查看以下解释:
RegisterClientScriptBlock紧跟在开始标记之后插入脚本,而RegisterStartupScript紧跟在结束标记之前添加脚本。
在IE中,HTML DOM是以串行方式创建的。所以你的头信息将首先被处理,你的表单对象将被创建,你的RegisterClientScript将被解析(如果不在功能块中将被执行)你的控件将被创建,然后你的RegisterStartupScript将被解析(如果不在功能块中将被执行)。
因此,至少在IE中,如果您将代码放在RegisterStartupScript中,基本上可以保证脚本可以访问的任何表单元素都存在。相反,基本上可以保证脚本的任何表单元素都不会存在于RegisterClientScript块中,代码也不会存在于功能块中。
发布于 2010-04-12 19:33:53
在这种情况下,您需要包装它,如下所示:
$(function() { $("#error-report").dialog("open"); });它只是将它放在页面中,但DOM可能还没有准备好(它是当您在控制台中运行它时,这就是它在那里工作的原因)。就像您直接在页面中编写脚本一样,包装它,使其在document.ready之前不会执行。
发布于 2010-04-12 20:48:16
你可以在http://www.jdxyw.com/?p=411上看一下
https://stackoverflow.com/questions/2621651
复制相似问题