Идентификатор namingContainer с динамическим просмотром сетки
Это не будет очень четким объяснением моей проблемы, но я не знаю, как объяснить это лучше.
У меня есть gridview, который я создаю динамически на PreInit. В этом сеточном представлении есть текстовые поля, динамически добавляемые в каждую строку.
Каждый раз, когда я нажимаю кнопку, я зацикливаюсь внутри ячеек сетки и получаю текст текстовых полей и обновляю базу данных.
при первом создании вида сетки уникальные идентификаторы строк выглядят так: ctl03, ctl04, ctl05, ctl06 (таким образом, идентификаторы текстового поля равны ctl03$txt0 и т. д.)
Когда я нажимаю кнопку в первый раз, строки UniqueID остаются прежними, поэтому я могу найти элементы управления методом FindControl(ID) или с помощью Request.Form[txt.UniqueID]
Тем не мение; после первого раза, когда я нажимаю кнопку, создаются ClientId строки, как показано ниже: ctl02, ctl03, ctl04, ctl05.. Так что я не могу найти текстовые поля и не могу поймать текст, написанный на них.
Когда я смотрю на отрендеренный HTML-код, я вижу, что rowClientID по-прежнему совпадают с первыми созданными (ctl03, ctl04, ctl05, ctl06)
У кого-нибудь есть идеи, почему rowIDs (имена контейнеров имен) меняются после первого обновления?
Заранее спасибо.
1 ответ
Одним из решений является создание ваших текстовых полей со статическими идентификаторами и не позволяйте им динамически создавать asp.net. Это можно сделать, если вы используете asp.net ver 4.
Другое решение состоит в том, чтобы просто сделать простой <input name="KnowName01" id="KnowId01" type="text" value="your value here" maxlength="100" etc... >
и затем при отправке назад вы просто фиксируете возврат по старому пути и получаете значение.
Request.Form["KnowName01"]
В конце концов, TextBox - это не что иное, как рендеринг ввода, плюс некоторые проверки того, что на нем написано, в том числе Anti-XSS safe.