Обновите состояние представления после заполнения списка ASP.NET AJAX - PullRequest
1 голос
/ 01 октября 2008

У меня есть выпадающий список, который заполняется через веб-сервис с использованием ASP> NET AJAX. При успешном обратном вызове метода в javascript я заполняю раскрывающийся список с помощью цикла:

function populateDropDown(dropdownId, list, enable, showCount) {
    var dropdown = $get(dropdownId);
    dropdown.options.length = 1;    
    for (var i = 0; i < list.length; i++) {
        var opt = document.createElement("option");
        if (showCount) {
            opt.text = list[i].Name + ' (' + list[i].ChildCount + ')';
        } else {
            opt.text = list[i].Name;
        }
        opt.value = list[i].Name;
        dropdown.options.add(opt);
    }
    dropdown.disabled = !enable;    
}

Однако, когда я отправляю форму, на которой включен этот элемент управления, список элемента управления всегда пуст при обратной передаче. Как я могу получить данные заполненных списков для сохранения после обратной передачи?

Редактировать: Может быть, я вернусь к этому задом наперед. Возможно, лучше задать вопрос: как мне заполнить раскрывающийся список из веб-сервиса, не используя панель обновления из-за полного жизненного цикла страницы, через который он должен пройти?

Ответы [ 2 ]

4 голосов
/ 01 октября 2008

Для этого вам нужно использовать Request.Form - вы не можете зашифровать ViewState «на лету» от клиента - это полностью разрушило бы его :)

Edit: в ответ на ваш Edit :) жизненный цикл страницы - это то, что позволяет вам в первую очередь использовать постоянство ViewState. Дерево управления обрабатывается там, и, ну, с этим просто не обойтись.

Request.Form - это совершенно жизнеспособный способ сделать это - он подскажет вам значение выбора. Если вы хотите знать все значения, вы можете выполнить сериализацию для скрытого элемента управления.

Гадко, да, но именно поэтому бог (некоторые называют его ScottGu) изобрел ASP.NET MVC:).

3 голосов
/ 01 октября 2008

Хотя я не совсем уверен, как это происходит, CascadingDropDown в AJAX Control Toolkit поддерживает это.

Это строка, которая делает это:

AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);

Но самой простой идеей было бы поместить выбранное значение в скрытое поле ввода для события обратной передачи.

...