2010-10-05 42 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();  
}