Как получить данные из динамически добавляемых текстовых полей?
-
04-07-2019 - |
Вопрос
Я динамически добавляю текстовые поля (а не фиксированное количество текстовых полей) в форму на странице ASP.NET. Как мне прочитать данные из этих текстовых полей?
Решение
Предполагая, что вы хотите получить доступ к элементам управления на обратной передаче, вы, вероятно, воссоздадите динамические элементы управления в точности так, как они были созданы при первоначальной загрузке, а затем используйте метод FindControls страницы, чтобы найти элементы управления. Вероятно, это поможет создать текстовые поля с такими идентификаторами, как Textbox1, Textbox2 и т. Д.
Другие советы
Посмотрите на Request.Params и извлеките их оттуда. Вы, конечно, должны будете дать им идентификаторы, чтобы иметь возможность различать их.
Из всех приложений ASP.NET, с которыми я работал, .NET любит использовать следующий алгоритм при создании идентификатора для серверных элементов управления:
ctl00$cphBody$[ControlID]
Попробуйте использовать этот алгоритм при доступе к вашим данным из динамически генерируемых текстовых полей.
Когда вы добавляете их, вы должны давать им имена/идентификаторы, и вы можете использовать их для ссылки на них.
Если нет, просмотрите DOM в javascript, чтобы найти их внутри созданной вами формы — они будут в том же порядке, в котором вы их вставили.
Наконец, все они доступны в качестве входных данных для публикации/получения на вашей странице, поэтому вы сможете просматривать их все, если присвоите им разные имена.
-Адам
При динамическом создании текстовых полей (предположительно с использованием JavaScript, но то же самое относится и к элементам управления ASP.NET) присваивайте им имена по определенному шаблону. Тот, который вы сможете распознать позже.
На стороне сервера, в любом обработчике событий, возникающих после Page_Init, вы можете перебирать коллекция Request.Form .
Не поддавайтесь искушению использовать Request.Param, потому что он может использоваться для применения подделки межсайтовых запросов к вашему приложению (злоумышленник может заманить пользователя в выдачу запроса GET, который ваше приложение будет интерпретировать так же, как оно будет интерпретировать POST один, который обычно не очень хорошая вещь.
Если вы добавляете динамические элементы управления ASP.NET (например, в Page_Render), вы также можете реконструировать элементы управления и использовать их свойства.
Вы можете использовать FindControl и передать идентификатор текстового поля, чтобы получить экземпляр текстового поля при обратной публикации. Свойство Text содержит данные, учитывая, что мы находимся на стадии загрузки страницы или позже в цикле. При добавлении динамических элементов управления переопределите метод CreateChildControls и добавьте динамические элементы управления в иерархию элементов управления на этом этапе цикла. Р>
Помните, что в ASP.Net каждый постбэк является новым экземпляром вашего класса. Если вы создали эти элементы управления во время предыдущей обратной передачи или при первом просмотре, они были собраны с остальной частью этого предыдущего экземпляра. Таким образом, чтобы использовать элементы управления в этом новом экземпляре, вам нужно создать их снова. Если вам требуется информация о состоянии, загруженная для этих элементов управления (включая любое значение, введенное пользователем), вам также необходимо создать до состояние представления, то есть вы делаете это во время события Init, а не событие загрузки.
Для создания динамических элементов управления я обычно использую элемент управления ASP.NET PlaceHolder и добавляю динамические элементы управления в этот контейнер. Р>
Я бы дал каждому динамическому элементу управления идентификатор.
Затем вы можете впоследствии использовать FindControl в PlaceHolder для доступа к динамическим элементам управления.
Я говорю "динамические элементы управления" означает элементы управления, которые вы добавляете во время выполнения