Динамическое управление с DevExpress ASPXComboBox имеет проблемы с Javascript - PullRequest
0 голосов
/ 05 марта 2010

У меня проблема с компонентом Dev Express, а именно с AspxComboBox.

Мой контекст таков: я хочу динамически генерировать интерфейс для некоторых из моих бизнес-объектов. Я разработал пользовательский элемент управления, который получает некоторые метаданные, и на основе этих метаданных элементы управления добавляют текстовые поля, редакторы дат и комбинированные поля в интерфейс. Все эти элементы управления работают как шарм, когда они добавляются на страницу в не динамическом режиме. Однако, когда я добавляю их из кода C #, в следующей строке Javascript появляется ошибка:

document.getElementById("usercontrol_combo_I").setAttribute("autocomplete", "off");

"usercontrol" - это идентификатор пользовательского элемента управления, который я разрабатываю. «combo» - это идентификатор комбо.

Ошибка в том, что элемент с идентификатором ("usercontrol_combo_I") не найден в HTML DOM.

Я обнаружил, что если я решу не использовать DataBind в самой комбо (закомментируйте любой вызов метода DataBind () экземпляра AspxComboBox), строка JS, содержащая ошибку, никогда не будет отображена (отсутствует). в окончательном HTML). Но, если я оставлю это так, любые последующие PostBacks очищают комбинированный список (в комбо больше нет элементов). Источником данных комбо является экземпляр IList, назначаемый при каждой загрузке страницы (даже если PostBack == true).

На форуме поддержки DevExpress есть сообщение, в котором сообщается об этой же проблеме, но команда не получила ответа.

Кто-нибудь здесь имел эту проблему и нашел способ ее решить?

Ответы [ 2 ]

0 голосов
/ 10 марта 2010

На самом деле, я только что нашел простой обходной путь. Если я просто вызову DataBind () для моего сгенерированного элемента управления в событии page_load самой страницы, проблема исчезнет.

Например:

protected void Page_Load(object sender, EventArgs e)
    {
        base.Page_Load();
        this.control.DataBind();
    }

Где «control» - это UserControl, который содержит выпадающий список. Странно то, что я вызываю DataBind даже в PostBack и CallBack.

Но, эй, это работает.

Я полагаю, что есть еще пара вещей, которые мне не хватает при использовании Devexpress. Но «практика совершенствует»!

Спасибо за ответ.

0 голосов
/ 10 марта 2010

При использовании ASP.NET Dev, если вы привязываетесь к событиям Page_Load, вам необходимо привязать ВСЕ запросы к серверу, включая обратные вызовы.

Теперь получение элемента HTML и установка его атрибутов не поддерживается. Единственный поддерживаемый способ отключить автозаполнение - отправка обратного вызова на сервер и отключение автозаполнения для свойства на стороне сервера, которое обновит элемент управления. Теперь comboBox ДОЛЖЕН быть тем, кто выполняет обратный вызов или оборачивает поле в CallbackPanel.

Вы также устанавливаете ClientInstanceName ASPxComboBox?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...