Программно передать элемент между Ajax RadListBoxes с TransferMode, установленным как Move

Я могу упустить что-то тривиальное, так что терпите меня здесь.

У меня есть два RadListBox, источник и пункт назначения.

<telerik:RadListBox runat="server" ID="rdlbDisplayColumnsSource" AllowTransfer="true"
TransferMode="Move" TransferToID="rdlbDisplayColumnsDest" CssClass="rdlbDisplayColumns">
    <Items></Items>
</telerik:RadListBox>
<telerik:RadListBox runat="server" ID="rdlbDisplayColumnsDest" CssClass="rdlbDisplayColumns"
AllowReorder="true">
    <Items></Items>
</telerik:RadListBox>

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

var displayCols = _Model.AdditionalDisplayColumns.Split(',');
foreach (var val in displayCols)
{
    var item = rdlbDisplayColumnsSource.FindItemByValue(val);
    rdlbDisplayColumnsSource.Transfer(item, rdlbDisplayColumnsSource, rdlbDisplayColumnsDest);
}

Я ожидал, что переносимые элементы будут удалены из Source ListBox, поскольку TransferMode установлен в Move, но это не так. Список получателей ListBox был обновлен ранее выбранными элементами, но эти элементы все еще присутствовали в источнике!

Если я пытаюсь удалить выбранные элементы в исходном ListBox после переноса, возникает исключение, что элемент отсутствует в списке.

Что является более чистым способом достижения поведения "Move" из кода позади при вызове.Transfer()?

1 ответ

Решение

По-видимому, Page_Load слишком рано для удаления элементов из источника (забавно, что элементы в конечном итоге отображаются в пункте назначения!).

Переместил код в Pre_Render и все заработало. Не так тривиально!

Другие вопросы по тегам