【发布时间】:2009-03-07 21:41:43
【问题描述】:
我在由页面(父 UC)加载的用户控件上具有以下结构:
<UpdatePanel>
<UpdatePanel>
.. In the codebehind, it loads a Child user control at runtime
</UpdatePanel>
</UpdatePanel>
UC 有 OnPageLoad 注册一个脚本。
ScriptManager.RegisterStartupScript(this, typeof(Page), "Load_" + this.ClientID, base.GetRegisterScript(this.ClientID), true);
JS 函数永远不会在异步回发上执行。如果我删除 UpdatePanel,它会按预期工作
编辑:使用 this.GetType() 而不是 typeof(Page) 但没有运气
再次编辑:
Matt - 我尝试将 typeof(Page) 替换为 UC 名称。这是更新后的行:
ScriptManager.RegisterStartupScript(this, typeof(TemplateAreaTypeOne), "Load_" + this.ClientID, "...JS function here,,", true);
为了澄清,页面加载了具有这些更新面板的父 UC。 ParentUC 然后加载 ChildUC,ScriptManager.RegisterStartuScript 在 ChildUC 中使用
编辑
标记有:
<script type="text/javascript">
//<![CDATA[
; findControl('PageLoadedHiddenTxtBox').value ='Set';OnLoadBegin('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit');OnLoadEnd('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit');
document.getElementById('ctl00_WorkSpaceContent_informationSummary').dispose = function() {
Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_WorkSpaceContent_informationSummary'));
}
//]]>
</script>
请注意,调用的函数是已添加到 HTML 中的 OnLoadBegin 和 OnLoadEnd
再次编辑
使用:
ScriptManager.RegisterStartupScript(this.Page, typeof(Page),....)
不知道为什么当我使用对页面的引用时它会起作用。
- 如果我在页面上有多个控件,这会起作用吗?
- 为什么当我使用对页面的引用时它会起作用?
【问题讨论】:
-
可以添加更新面板的全部代码吗?
-
您需要控制类型而不是 this 的类型,无论您要针对的控制是什么,您都需要为启动脚本注册该类型,所以如果您正在加载一个控件 MyControl,那么 typeof(MyControl)启动脚本必须知道部分回发的目标
-
我认为由于添加了来自代码隐藏的控件,您可能会遇到其他问题,脚本管理器会在解析主标记后注册脚本,因此您不能在其中使用 类型替换这样添加的js,id喜欢先排除控件类型虽然
-
好的,所以你能检查你的脚本是否在标记中,在其中粘贴一个 alert('hello') 以确保它正在运行,而且你正在调用“这里的 js 函数”是是在标记中还是使用 registerClientScriptBlock 添加的,如果是,在哪里?
-
是的,JS 在标记中。我已经用标记编辑了我的原始帖子
标签: asp.net javascript ajax