Типовые решения этой проблемы заключается в создании новых элементов управления, которые не вполне осуществимы в нормальных условиях.Существует простое, но тривиальное решение этой проблемы.
Проблема заключается в том, что ListItem
теряет свои атрибуты при обратной передаче. Однако сам список никогда не теряет никаких пользовательских атрибутов. Таким образом можно воспользоваться этим простым, но эффективным способом.
Шаги:
сериализации атрибуты, используя код в ответ выше (https://stackoverflow.com/a/3099755/3624833)
хранить его в пользовательский атрибут ListControl (DropDownList, checklistbox, что угодно).
В ответ на сообщение, верните пользовательский атрибут из ListControl и затем десериализуйте его как атрибуты.
Вот код, который я использовал для (де) сериализации атрибуты (Что мне нужно сделать, чтобы отслеживать, какие элементы списка были первоначально визуализируется как выбран при извлечении из внутреннего интерфейса, а затем сохранить или удалить строки в соответствии с изменениями, сделанных пользователем на UI):
string[] selections = new string[Users.Items.Count];
for(int i = 0; i < Users.Items.Count; i++)
{
selections[i] = string.Format("{0};{1}", Users.Items[i].Value, Users.Items[i].Selected);
}
Users.Attributes["data-item-previous-states"] = string.Join("|", selections);
(выше, «пользователь» является CheckboxList
контролем).
На пост обратно (в моем случае кнопку Отправить Нажмите событий), я использую следующий код, чтобы получить то же самое и хранить их в словарь для последующей обработки:
Dictionary<Guid, bool> previousStates = new Dictionary<Guid, bool>();
string[] state = Users.Attributes["data-item-previous-states"].Split(new char[] {'|'}, StringSplitOptions.RemoveEmptyEntries);
foreach(string obj in state)
{
string[] kv = obj.Split(new char[] { ';' }, StringSplitOptions.None);
previousStates.Add(kv[0], kv[1]);
}
(PS: У меня есть библиотечные функции, которые выполняют обработку ошибок и преобразование данных, опуская их здесь для краткости).
Pobably должен также показать ваш .aspx-код. – madcolor