2010-10-05 50 views
1

我得控制(rcbModels)参考使用代码块这样的UpdatePanel不代码块

function pageLoad() { 

     models = $find("<%= rcbModels.ClientID %>"); 
    } 

工作,我加入一个UpdatePanel这个页面,但我总是得到以下错误: “的控件集合无法修改,因为控件包含代码块(即<%...%>)。“

我试图改变的代码块到:

 function pageLoad() { 

     models = $find("<%# rcbModels.ClientID %>"); 
    } 

和数据绑定上没有成功的Pre_RenderComplete事件。

解决此问题的最佳方法是什么?

回答

0

对于简单的案例(琐碎的页面,容器链到rcbModels从不改变,代码质量不担心),硬编码rcbModels.ClientId到脚本块节省时间,并完成工作。

function pageLoad() 
{ 
    models = $find("panelX_containerY_rcbModels"); 
} 

在其他情况下,生成一个页面范围的客户端控件ID映射到客户端ID的字典。

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterClientScriptBlock(this, typeof(YourPageClass), 
     "__BehaviorIds", String.Format(CultureInfo.InvariantCulture, @" 
      var __BehaviorIds = {{ 
       rcbModels: '{0}', 
       anotherControl: '{1}', 
       yetAnotherControl: '{2}' 
      }};", 
     rcbModels.ClientID, 
     anotherControl.ClientID, 
     yetAnotherControl.ClientID), true); 
} 

然后,您可以在客户端通过名称访问行为ID。

function pageLoad() 
{ 
    models = $find(__BehaviorIds.rcbModels); 
    anotherControl = $find(__BehaviorIds.anotherControl); 
    yetAnotherControl = $find(__BehaviorIds.yetAnotherControl); 
} 
0

感谢您的回复。我最终做的是将“#”改为“#”,并在后面的代码中添加一个DataBind()子句并解决它。

function pageLoad() { 

    models = $find("<%# rcbModels.ClientID %>"); 
} 




protected void Page_Load(object sender, EventArgs e) 
{  
    Page.Header.DataBind();  
}