CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум .NET > Форум ASP.NET

Ответ Создать новую тему
 
Старый 27.01.2012, 10:32   #1
23Alex24
Форумчанин
 
Регистрация: 24.07.2010
Адрес: Казань
Сообщений: 443
Репутация: 24 (24)
По умолчанию FindControl не находит компонент на странице

Пример из книги Visual C# 2008 базовый курс, но я на 10ке щас сижу, пример заключается в том, что мы при нажатии на кнопку отправляемся на другую страницу и хотим выдрать значения с предыдущей:

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            DropDownList a = (DropDownList)PreviousPage.FindControl("DR");
            Label2.Text = a.SelectedIndex.ToString();
            string SelectedEvent = 
                ((DropDownList)PreviousPage.FindControl("DR")).SelectedValue;
 
            string FirstName = ((TextBox)PreviousPage.FindControl("TextBox1")).Text;
            string LastName = ((TextBox)PreviousPage.FindControl("TextBox2")).Text;
            string Email = ((TextBox)PreviousPage.FindControl("TextBox3")).Text;
            Label1.Text = string.Format("{0} {1} выбрал событие", FirstName, LastName, SelectedEvent);
        }
        catch(Exception ex)
        {
            Label1.Text = ex.Message;
        }
    }
 

Почему-то он не находит контрол, переменная а пустая, почему?

Добавлено через 58 минут
И вообще почему-то когда делаю просто так:
Код C#
1
2
3
 
 PreviousPage.Controls.Count;
 
он мне возвращает всего 1 элемент, хотя их там намного больше, он что лэйблы, текстбоксы и т.д. за контролы не считает чтоли?

Добавлено через 11 минут
Немного начинаю догонять, когда пишу
Код C#
1
2
3
 
PreviousPage.Controls.Count;
 
он выдает 1 потому что там форма 1, а если перед контролс форм еще написать, то 3 выдает, но блин в книге просто файнд делается и все, че неправильно чтоли получается? надо опускаться до уровня контрола в котором находятся те, которые ищу?

Добавлено через 7 минут
Подскажите хоть как можно тогда выдрать данные из предыдущей страницы

Добавлено через 10 минут
Все, нашел решение в топике http://www.cyberforum.ru/asp-net/thr...read51149.html это ппц блин, они офигели)))
23Alex24 вне форума
Другие темы раздела
ASP NET C# Прокрутка вниз страницы до определенной точки или по координатам
Подскажите какую то функцию Scrolling без разницы прокрутка до точки в низ страницы или по координатам. Не использую javascript.. Прокрутка вниз страницы до определенной точки или по координатам
ASP NET C# Хотелось бы сделать свой чат
Все доброго времени суток. Разбираюсь с ASP.NET и думаю создать чат, но поскольку сайты никогда не делал плохо представляю реализацию. Знаком только с C# html\css, ну и с js. Искал различные туториалы по написанию чатов, нашел только на VB.NEt - > подскажите, где взять статьи\туториалы\лекции.... Хотелось бы сделать свой чат
Старый 27.01.2012, 14:22  [ТС]   #11
23Alex24
Форумчанин
 
Регистрация: 24.07.2010
Адрес: Казань
Сообщений: 443
Репутация: 24 (24)
По умолчанию Re: FindControl не находит компонент на странице

Да там в книжке есть еще другие подходы, когда понадобится гляну еще, мне любопытно было просто, только только за АСП взялся, спс)
23Alex24 вне форума
Старый 03.03.2012, 19:50   #12
HF
Новичок
 
Регистрация: 09.09.2011
Адрес: Екатеринбург
Сообщений: 58
Репутация: 17 (17)
По умолчанию Re: FindControl не находит компонент на странице

Цитата Сообщение от 23Alex24 Посмотреть сообщение
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
try
        {
            string SelectedEvent =
                ((DropDownList)PreviousPage.FindControl("ctl00$MainContent$DR")).SelectedValue;
 
            string FirstName = ((TextBox)PreviousPage.FindControl("ctl00$MainContent$TextBox1")).Text;
            string LastName = ((TextBox)PreviousPage.FindControl("ctl00$MainContent$TextBox2")).Text;
            string Email = ((TextBox)PreviousPage.FindControl("ctl00$MainContent$TextBox3")).Text;
            Label1.Text = string.Format("{0} {1} выбрал событие {2}", FirstName, LastName, SelectedEvent);
        }
        catch(Exception ex)
        {
           Label1.Text = ex.Message;
        }
 
А если я ставлю в файнд контроле те имена, которыми названы в студии сами контролы, он ничего не находит ну и эксепшн выдает типа нет ссылки на экземпляр
Недавно я начал активно работать с мастер-пейджами и контролами и сразу столкнулся с этой проблемой. Разумеется пришлось искать решение. Вот что я теперь использую

1) Во-первых, отказываемся теперь использовать
FindControl("TextBox2") и FindControl("ctl00$MainContent$TextBox2")
начинаем получать и подставлять реальный Asp ID контрола. И чтобы не "париться" за ручную генерацию "ctl00$MainContent$" таких имён, а получаем в поиске нужное имя FindControl(TextBox2.UniqueID)

2) Во-вторых, чудесная функция рекурсивного поиска вашего контрола.
http://sharpertutorials.com/recursive-findcontrol/
Почему нужна рекурсия? Потому что .FindControl по моему опыту не находит ничего "дальше своего носа". Если вы не знаете в каком парент-контроле он находится или он вдруг находится как суб-контрол, то ASP его уже не найдёт.

Теперь я не напрягаясь делаю вызов
Код C#
1
2
3
 
TextBox myControlSomeWhere = (PreviousPage.FindControlRecursive(TextBox.UniqueID) as TextBox ).Text;
if (myControlSomeWhere== null)
... совсем проблема с поиском

Последний раз редактировалось Памирыч; 03.03.2012 в 20:32. Причина: Теги
HF вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
PascalABC Написать программу,которая находит в заданной последовательности находит второе максимальное число
Написать программу,которая находит в заданной последовательности находит второе максимальное число
Vikysi08
PHP Принцип завязки на странице index, Не получается завязать все функции на одной странице
Здравствуйте! Подскажите пожалуйста в чём моя ошибка!? Есть страница index: <? include("config/config.php"); // Подключение к базе include("functions/auth.php"); // Проверка логина и пароля ?> <html> <head> <script language="javascript" src="js/jquery.js"></script>
vitaher
ASP.NET .NET 2.x master page и findcontrol()
Здравствуйте. В проекте две страницы одна masterpage другая наследуется от неё (Web Content Form). На наследуемой странице расположен серверный элемент - label Никак не могу на событие page_load наследуемой страницы получить этот элемент: dim l as label l=findcontrol("label1") l.text =...
Алекс_
ASP.NET Не работает findcontrol в Page_Load
Перехожу с одной страницы на другую c помощью LinkButton На новой странице с помощью кода: protected void Page_Load(object sender, EventArgs e) { if (Page.PreviousPage != null) { HiddenField hf = (HiddenField)Page.PreviousPage.FindControl("ids"); ...
igorx2009
ASP.NET Проблема с методом FindControl в FormView
Всем привет!! Столкнулся с такой проблемой: Есть FormView <asp:FormView ID="UserFormView" runat="server" DataKeyNames="UserID" DataSourceID="FormViewDataSource" DefaultMode="Edit"> <EditItemTemplate> <table width="99%"> <tr style="width: 100%">
zema
Опции темы

Текущее время: 23:36. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика