UpdatePanel не работает с блоками кода

У меня есть ссылка на элемент управления (rcbModels), используя кодовый блок, как это

  function pageLoad() {

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

Я добавил UpdatePanel на эту страницу, но всегда получаю следующую ошибку: "Невозможно изменить коллекцию Controls, поскольку элемент управления содержит блоки кода (т. Е. <%...%>)".

Я попытался изменить кодовый блок на:

      function pageLoad() {

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

И DataBinding для события Pre_RenderComplete без успеха.

Какой лучший способ решить эту проблему?

3 ответа

Посмотрите на http://www.telerik.com/community/forums/aspnet/editor/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks-i-e-lt-gt.aspx

похоже, что это может быть вызвано runat="server" в теге head. перемещение кода javascript в тело, но все еще за пределами панели обновления, может исправить это.

Спасибо за ваш ответ. В итоге я изменил "=" для "#" и добавил предложение DataBind() в коде, и это решило проблему.

function pageLoad() {   

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




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

Для простых случаев (тривиальная страница, контейнерная цепочка до rcbModels никогда не меняется, качество кода не имеет значения), жесткое кодирование rcbModels.ClientId в блок сценария экономит время и выполняет свою работу.

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

В других случаях генерируйте обще-страничный словарь клиентских идентификаторов элементов управления, отображающий идентификаторы клиентов.

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);
}

Затем вы можете получить доступ к идентификаторам поведения по имени на стороне клиента.

function pageLoad()
{
    models = $find(__BehaviorIds.rcbModels);
    anotherControl = $find(__BehaviorIds.anotherControl);
    yetAnotherControl = $find(__BehaviorIds.yetAnotherControl);
}
Другие вопросы по тегам