Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
15 / 15 / 2
Регистрация: 12.01.2010
Сообщений: 51

Обращение к элементу по его ID

14.12.2010, 23:53. Показов 10901. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи, всем! Не подскажите как обратиться к элементу, который создается динамически, по его ID?
Например где то в коде создается элемент ТекстБокс и добавляется на страницу:
C#
1
2
3
TextBox t1 = new TextBox();
t1.ID = "textbox1";
PlaceHolder1.Controls.Add(t1);
как взять значение текстбокса, зная его ID?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2010, 23:53
Ответы с готовыми решениями:

Обращение к элементу списка по его номеру
Добрый вечер! Подскажите, пожалуйста, как обратиться к элементу списка с определённым номером? Допустим, у меня есть такой список: ...

Обращение к элементу в List, зная его индекс
Здравствуйте, у меня возникла проблема создан список public List<Pozition> pozitions; В который записываются...

Что быстрее? Обращение к элементу массива или к элементу структуры?
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на...

10
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.12.2010, 23:57
hardworker, FindControl
1
15 / 15 / 2
Регистрация: 12.01.2010
Сообщений: 51
14.12.2010, 23:58  [ТС]
Спасибо
0
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 5
12.12.2012, 14:50
Уважаемые знатоки, пожалуйста напишите код чуть подробнее. Я не могу понять как пользоваться этим FindControl. Например вот так :
C#
1
textbox1.Text = FindControl("box" + Convert.ToString(num - 1)).Text
не работает, хотя элемент TextBox c ID ("box" + Convert.ToString(num - 1)) создаётся буквально строчкой выше.
На всякий случай опишу проблему ещё раз, Я создаю textbox с определённым id, после нажатия на кнопку на странице мне нужно получить значение из этого textbox, которое написал пользователь. Если бы это был уже созданный TextBox можно было бы просто написать имя TextBox(а).Text.
0
326 / 159 / 45
Регистрация: 06.12.2012
Сообщений: 305
12.12.2012, 15:26
привидение типов, и где искать этот контрол не хватает.

C#
1
textbox1.Text =((TextBox)this.Page.FindControl("box" + Convert.ToString(num - 1))).Text;
в случай с верху то ищем в PlaceHolder1
C#
1
textbox1.Text =((TextBox)PlaceHolder1.FindControl("box" + Convert.ToString(num - 1))).Text;
0
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 5
12.12.2012, 16:24
Спасибо, но не работает. Если я правильно понял в ((TextBox)this.Page.FindControl("box" + Convert.ToString(num - 1))).Text;
(TextBox) - тип контрола ID которого ("box" + Convert.ToString(num - 1)) и this.Page - место где ищем.
Искать нужно в Experience потому что код страницы :

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestButton.aspx.cs" Inherits="TestButton" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<script runat="server">
 
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="Experience" runat="server">
    <div>
    <asp:Label ID="Label1" runat="server" text="Введите Ваше последнее место работы" />
    <asp:Panel id="places" runat="server">
        <asp:TextBox id="first" runat="server" />
        <br />
        <br />
        </asp:Panel>
        <asp:Button id="Add" Text="Еще" OnCommand="AddExperience" CommandName="Add" runat="server" />
    </div>
    
    </form>
</body>
</html>
Ошибка: Ссылка на объект не указывает на экземпляр объекта.
0
326 / 159 / 45
Регистрация: 06.12.2012
Сообщений: 305
12.12.2012, 17:04
C#
1
Label1.Text =((TextBox)places.FindControl("first")).Text;
0
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 5
17.12.2012, 11:48
Да, если искать текст бокс "first" который создаётся так сказать статически (т.е. в коде прописан) то
C#
1
Label1.Text =((TextBox)places.FindControl("first")).Text;
работает. Но для него можно просто писать first.Text. Проблемы начинаются когда я пытаюсь найти текст бокс который создаётся там же, где и "first" но с помощью вот такого кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 if (num != 0)
        {
            //вот эта строчка и не работает
            tb[num - 1].Text = ((TextBox)places.FindControl("box" + Convert.ToString(num - 1))).Text;
        }
        if (num < 10)
        // Чтобы не возникало ошибки обращения к несуществующему элементу массива
        {
            TextBox newBox = new TextBox();
            newBox.ID = "box" + Convert.ToString(num);
            
            tb[num] = newBox;
            num++;
        }
        for (int i = 0; i < num; i++)
        // Добавление на форму контролов из массива.
        {
            places.Controls.Add(tb[i]);
            Label lb = new Label();
            lb.Text = "<br><br>";
            places.Controls.Add(lb);
        }
На всякий случай опишу смысл примера. Есть страничка с текст боксом, пользователь может нажав на кнопку увеличить число текстбоксов, но то что он написал в них до этого не должно пропадать. Проблема в том что при нажатии на кнопку все текстбоксы кроме первого перерисовываются, и по этому пропадают значения в них.Для этого я и хочу каждый раз когда нажимается кнопка считывать данные с уже заполненных текстбокосов, чтобы потом рисовать текстбоксы с данными.

Подведя итог, мне нужен способ узнать значение текстбокса, который был программно создан на странице. а не тот который статично на ней находиться. Кстати, если посмотреть на код страницы в браузере до того как я пытаюсь считать значения с текст бокса он там есть:
HTML5
1
<input name="box0" type="text" id="box0"
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
17.12.2012, 12:45
обсуждалось на форуме сотни раз... поиск рулит...
 Комментарий модератора 
Правила п.3.3
Не отсылайте других пользователей в поиск и избегайте ссылок на поисковые системы (Google, Yandex и др.). Самостоятельно найдите ответ на вопрос и разместите его на форуме.
0
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 5
18.12.2012, 08:05
Уверен что обсуждалось, но как вы видите я и не создал новую тему, а нашёл ту в которой, человек до меня задал буквально тот же вопрос. Вот только у меня не получается заставить этот FindControl работать. Я конечно понимаю что мои знания C#, а особенно ASP не велики, но проблема всё же отнюдь не выглядит тривиальной.
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
18.12.2012, 22:42
Цитата Сообщение от Nero_DT Посмотреть сообщение
Проблема в том что при нажатии на кнопку все текстбоксы кроме первого перерисовываются, и по этому пропадают значения в них.Для этого я и хочу каждый раз когда нажимается кнопка считывать данные с уже заполненных текстбокосов, чтобы потом рисовать текстбоксы с данными.
Потому что у вас срабатывает PostBack который заставляет заново рисовать страницу, в которой разумеется уже не будет ваших созданных кнопочек. Не нужно снова ничего рисовать - нужно в Page_Load смотреть режим обращения к странице (PostBack или нет) и не рисовать ничего снова и не затирать места где "рисуются" кнопки. Тогда все старые действия сохранятся.
При нажатии на кнопку нужно сделать так чтобы это не вызывало лавину событий в которых вы (как вы признались выше) ещё не сильно хорошо понимаете. Сделайте создание текстбоксов на JavaScripts. Тогда ваша страничка останется жива до того момента, когда вы решите нажать "красную кнопку" и прочитать/сохранить/обработать все эти значения.
Чтобы снова рисовать - нужно что-то читать по этим данным. Или из запроса придут все данные по тексбоксам (читать через Page.Form["box0") или же создавать какие-то хранилища (типа сессий, вьюстейтов, баз данных и т.п.) Но это больше изврат.
FindControl в случае полной перерисовки страницы уже не найдёт ничего, даже если вы будете знать полное название своего текстбокса. Потому что ваших текстбоксов не будет существовать.

Цитата Сообщение от Nero_DT Посмотреть сообщение
Уверен что обсуждалось, но как вы видите я и не создал новую тему, а нашёл ту в которой, человек до меня задал буквально тот же вопрос. Вот только у меня не получается заставить этот FindControl работать. Я конечно понимаю что мои знания C#, а особенно ASP не велики, но проблема всё же отнюдь не выглядит тривиальной.
Все задачи "не выглядят тривиальными", просто потому что изменены условия задачи. Но в в целом все одно и тоже и методы решения одни и те же. Просто нужно применить знания в вашу ситуацию (которая с вашей стороны удобнее и понятнее смотрится, чем со стороны читателей).

Добавлено через 4 минуты
Цитата Сообщение от hardworker Посмотреть сообщение
Доброй ночи, всем! Не подскажите как обратиться к элементу, который создается динамически, по его ID? как взять значение текстбокса, зная его ID?
Добавлю, что ID будет разный. Клиентский ID может быть и будет такой как вы его назначили - "textbox01234", а ID по которому будет искать FindControl будет совсем другой "ctl00$ContentPlaceHolder1$ObjectsListBy Type$objectListWithDeleted" вот примерно так. Поэтому вообще есть сомнения по этому варианту. Лучше, на мой взгляд, вариант с созданием через JavaScripts и потом после запроса из параметров формы читать все введённые данные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2012, 22:42
Помогаю со студенческими работами здесь

Обращение к элементу
В очень короткие сроки надо сделать работу, поэтому просто нет времени разбираться в элементарных вещах. Подскажите пожалуйста. Мне...

Обращение к элементу по ID
Здравствуйте, не пинайте сильно только начинаю изучать javascript, раньше программировал на Delphi, вобщем вопрос такой: есть форма, в...

Обращение к элементу
Доброго времени суток ! Имеется код: foreach (var pb in Controls.OfType&lt;PictureBox&gt;()) { ...

Обращение к элементу по id
Есть одна страница. На ней есть слой с постоянно меняющимся id. Как обратиться к этому слою? id элемента выглядит так: &lt;div...

Обращение к элементу
Подскажите, как в Маткаде обратиться к конкретному элементу столбца... То есть есть столбец значений, а в формуле ниже нужно использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru