Программно передать элемент между 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 и все заработало. Не так тривиально!