我有一个奇怪的问题,我无法理解它发生的原因。
在同一* .ascx文件中,我声明了一个Telerik:RadWindowManager控件,然后我调用$find()
来找到RadWindowManager。但是,该方法始终返回空值。
这是代码(包含在相同的* .ascx中):
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<script type="text/javascript">
function init(){
GetRWndManager();
}
function GetRWndManager() {
return $find("<%=rwndManager.ClientID%>"); //return null at this step
}
</script>
<telerik:RadWindowManager ID="rwndManager" runat="server" ShowContentDuringLoad="False" VisibleOnPageLoad="False" EnableShadow="true">
</telerik:RadWindowManager>
答案 0 :(得分:0)
确保在Sys.Application.Load事件之后调用init()函数(实际上是GetRWndManager()函数),因为在此之前可能不会创建IScriptControl客户端对象:http://msdn.microsoft.com/en-us/library/bb383829.aspx。
以下是一个例子:
function init() {
GetRWndManager();
Sys.Application.remove_load(init);
}
Sys.Application.add_load(init);
function GetRWndManager() {
return $find("<%=rwndManager.ClientID%>");
}
或者,使用setInterval()并检查是否有对象,直到你得到一个对象或达到最大值,比如200次尝试。
另外,考虑在UC中使函数名称唯一,以防止它们在页面上有多个实例时相互覆盖。以下KB将为您提供一个简洁的想法:http://www.telerik.com/support/kb/aspnet-ajax/details/using-dynamic-unique-names-for-javascript-functions。