Перезагрузить данные публикации в onClick в asp.net

Код упрощен, чтобы было понятнее.

Описание

Я пишу настраиваемый элемент управления, который использует Controls.Add () для добавления всех необходимых ему подэлементов управления.

Скажем, например, мой элемент управления называется «lot_of_text_boxes», и я добавляю минимальное количество текстовых полей и предоставляю кнопку (Controls.Add (button)), которая говорит «добавить новое текстовое поле».

Элемент управления отображается хорошо. Я нажимаю кнопку, OnLoad (EventArgs e) воссоздает субэлементы управления, и волшебство asp.net находит все мои опубликованные данные и заполняет текстовые поля, чтобы я мог их прочитать.

btnAddNew_Click (отправитель объекта, EventArgs e) вызывается для добавления нового текстового поля.

Сначала я попробовал Controls.Add (текстовое поле), но это помещает текстовое поле внизу под кнопкой добавления.

Я мог бы удалить кнопку, добавить текстовое поле и снова добавить кнопку, но я не хочу этого делать, потому что в реальном случае это непросто (много связанных кнопок и элементов управления переплетены).

Что я хочу сделать: Number_of_Textboxes_to_show ++; Controls.Clear (); OnLoad (новый EventArgs ());

это стирает элемент управления, чтобы начать заново, и воссоздает его с одним новым.

Проблема

поскольку постданные уже были загружены, страница перерисовывается, но все данные в полях были потеряны. Мне действительно нужна функция LoadPostData (), которая просматривает все субэлементы управления и перезагружает их данные поста.

для меня имеет смысл, что данные сообщения все еще находятся в памяти (я надеюсь), и все элементы управления на проходе 2 имеют тот же уникальный идентификатор, что и на проходе 1 (и в предыдущей форме, которая была опубликована).

Кто-нибудь видел что-нибудь подобное?


person Jeff    schedule 11.01.2010    source источник


Ответы (1)


Похоже, проблема заключается в простом размещении элементов управления. Если бы элементы управления добавлялись в то место, которое вы хотели (над кнопкой), не было бы необходимости стирать форму и перестраивать ее, верно?

Я бы предложил добавить несколько элементов управления Panel или Placeholder к вашему пользовательскому элементу управления, чтобы определить его макет. Таким образом, ваши текстовые поля могут быть добавлены в Panel вместо общего пользовательского элемента управления, и ваш макет будет сохранен, а элементы управления будут там, где вы хотите.

person womp    schedule 11.01.2010
comment
Проблема в том, что у меня также есть кнопка удаления этого текстового поля рядом с каждым текстовым полем, и я не хочу ничего писать в базу данных, пока пользователь не нажмет «Сохранить», потому что я ожидаю, что многие люди откажутся от ввода. Я могу просматривать каждый элемент управления и пытаться обновлять его каждый раз, когда удаляю или добавляю (и есть два типа удаления: один для тех, что есть в базе данных, потому что я должен знать, чтобы удалить их при сохранении, и один для новых, где никогда не спасает). Проблема в том, что мои кнопки удаления и добавления должны повторно реализовать некоторую логику, которую выполняет onload. Меня беспокоят ошибки. - person Jeff; 12.01.2010