UpdatePanel не работает с блоками кода - PullRequest
1 голос
/ 05 октября 2010

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

  function pageLoad() {

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

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

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

      function pageLoad() {

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

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

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

Ответы [ 3 ]

0 голосов
/ 06 октября 2010

Для простых случаев (тривиальная страница, цепочка контейнеров до 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);
}
0 голосов
/ 06 октября 2010

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

function pageLoad() {   

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




protected void Page_Load(object sender, EventArgs e)   
{      
     Page.Header.DataBind();       
}
0 голосов
/ 05 октября 2010

Глядя на 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 в тело, но все еще за пределами панели обновления, может исправить это.

...