В настоящее время я работаю с частью моего приложения, которая использует Dynamic Web User Controls, и у меня возникли проблемы с поиском наилучшего способа создания экземпляров элементов управления при обратной передаче с помощью ViewState или другого метода, который не требует, чтобы я запрашивал базу данных при каждой обратной передаче.
В основном на моей странице есть пользовательский элемент управления, который содержит панель для хранения переменного количества дочерних пользовательских элементов управления и кнопку с надписью «Добавить элемент управления», функция которой довольно понятна.
Дочерний пользовательский элемент управления довольно прост; это просто кнопка удаления, выпадающий список и элемент управления выбора времени, расположенные в ряд. Каждый раз, когда пользователь нажимает кнопку «Добавить элемент управления» на родительском элементе управления, на панель с дочерними элементами управления добавляется новая «строка».
То, что я хотел бы сделать, - это иметь возможность добавлять и удалять элементы управления в эту коллекцию, изменять значения и выполнять любые необходимые мне операции «в памяти» без необходимости каких-либо обращений к базе данных. Когда я закончу добавлять элементы управления и заполнять их значения, я хочу нажать «сохранить», чтобы сохранить / обновить все данные из элементов управления в базе данных сразу. В настоящее время единственное решение, которое я нашел, - просто сохранять данные в базе данных каждый пост обратно, а затем использовать строки, хранящиеся в БД, для повторного создания элементов управления постбэком. Очевидно, что это вынуждает пользователя сохранять изменения в БД против их воли, и в случае, если он хочет отменить работу с элементами управления без сохранения своих данных, необходимо выполнить дополнительную работу, чтобы гарантировать, что ранее зафиксированные строки были удалены.
Из того, что я узнал об использовании динамических элементов управления, я знаю, что лучше всего добавлять элементы управления на страницу на этапе инициализации жизненного цикла, а затем заполнять их значения на этапе загрузки. Я также узнал, что единственный способ убедиться в том, что вы можете сохранить состояние представления элемента управления, это убедиться, что вы присваиваете каждому динамическому элементу управления уникальный идентификатор и обязательно назначаете ему точно такой же идентификатор при повторном создании элемента управления. Я также узнал, что ViewState на самом деле не загружается до окончания этапа Init в жизненном цикле. Вот где моя проблема. Как мне сохранить и получить имена этих элементов управления, если я не могу использовать состояние представления и не хочу выполнять какие-либо вызовы в базе данных? Возможна ли подобная манипуляция в памяти / пакетное сохранение значений даже с использованием ASP.net?
Любая помощь с благодарностью,
Mike