Как получить данные из динамически добавляемых текстовых полей?

StackOverflow https://stackoverflow.com/questions/231739

Вопрос

Я динамически добавляю текстовые поля (а не фиксированное количество текстовых полей) в форму на странице 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 для доступа к динамическим элементам управления.

Я говорю "динамические элементы управления" означает элементы управления, которые вы добавляете во время выполнения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top