ASP.NET, элементы управления, добавленные с помощью .Controls.Add () теряются при публикации страницы, и если я добавляю их с помощью .InnerHtml, я не могу ссылаться на них - PullRequest
1 голос
/ 01 марта 2011

Я пытаюсь сделать страницу комментариев.Я получил ранее сделанные комментарии из базы данных, и есть текстовое поле для нового комментария, который будет представлен.Таким образом, чтобы отобразить старые комментарии из базы данных, их нужно добавлять динамически, верно?Сначала я использовал что-то вроде: TheContainerControl.Controls.Add (TheComment), но оказывается, что когда страница публикуется обратно (новый комментарий отправлен или что-то в этом роде), все, что я динамически добавил, исчезло!Чтобы обойти это, я использовал взамен TheContainerControl.InnerHtml ("[html]").Таким образом, когда страница отправляется обратно, элементы управления, которые я динамически добавил, не теряются.Тем не менее, я искал способ добавления обработчиков событий в элементы управления, которые я добавляю через .InnerHtml, в течение почти девяти или десяти часов, и я ничего не нашел :( Я вообще не могу ссылаться на них, .FindControl () возвращает нулевую ссылку. Я также попытался вручную вставить код / ​​сценарий, который вызвал бы событие, и с треском провалился (я новичок в jQuery и очень мало знаю javascript). Пожалуйста, помогите, если можете.

Ответы [ 3 ]

0 голосов
/ 01 марта 2011

Эти старые комментарии, которые вы добавляете обратно на страницу, являются ли эти элементы пользовательского интерфейса, которые реагируют на события DOM, такие как щелчок и т. Д., Или это просто ярлыки, которые есть только для отображения? Если они просто для отображения, то, как сказал выше Брайан, вам лучше использовать Repeater r GridView или ListView вместо динамических элементов управления.

На самом деле, даже если они являются элементами управления, вы все равно можете поместить их в столбец шаблона в GridView и позволить ему обрабатывать нумерацию страниц и т. Д. Вы можете использовать живые события jQuery для работы с этими элементами управления.

В качестве альтернативы используйте ASP.NET Ajax и панели обновления, чтобы обновить только ту часть страницы, которая абсолютно нуждается в обновлении при обратной передаче, оставив другие части без изменений.

Было бы полезно, если бы вы могли опубликовать некоторый код.

0 голосов
/ 01 марта 2011

При динамическом добавлении элементов управления на страницу в Asp.net следует учитывать жизненный цикл страницы .Очень важно, когда вы можете добавить элементы управления и сохранить их после следующей обратной передачи.Или как поздно вы можете добавлять элементы управления и при этом отображать их.

Обычная тенденция для людей, динамически создающих страницы, - это просто начать размещать свой код в Page_Load (), но это слишком поздно в жизненном цикле.Возможно, вы захотите попробовать Init (или Page_Init).

Как и другие предлагали, вы также можете вообще не динамически добавлять элементы управления, а вместо этого петь некоторые встроенные элементы управления содержимым Asp.net.управлять динамическим состоянием вашей страницы.Если исходить из других веб-фреймворков / технологий, где вы можете просто создать страницу на лету, Asp.net может показаться немного сложным. Просто помните - как только вы научитесь использовать жизненный цикл страницы и элементы управления Asp.net, вам не придется вручную управлять состоянием всех элементов на странице.

0 голосов
/ 01 марта 2011

Было бы гораздо проще использовать вместо этого элемент управления, такой как Repeater, GridView или ListView, который построен для отображения динамического числа комментариев.

Динамические элементы управления необходимо добавить обратно на страницукаждый постбэк.

Я не уверен, что вы имеете в виду: «Я искал почти девять или десять часов, чтобы найти способ добавить обработчики событий в элементы управления, которые я добавляю через .InnerHtmlничего не нашел :( Я не могу ссылаться на них вообще. .FindControl () возвращает нулевую ссылку. Я также пытался вручную вставить код / ​​скрипт, который вызвал бы событие, и потерпел неудачу "- как JQuery вписываетсяВы пытаетесь сделать это на клиенте или сервере?

HTH.

...