2014-12-16 4 views
3

В page_Init, я создаю номер UpdatePanel s и внутри этих UpdatePanel с одним Panel в каждом. Затем я использую эту панель для дальнейшего продвижения и добавления других элементов управления динамически. Например, я добавляю в каждую из этих панелей число TextBoxe s и Button s. Кроме того, я привязываю событие click ко всем кнопкам, которые создаются динамически. Эти события нажмите AddressOf в другом классе под названием События. В Sub из класса Event, когда я пытаюсь найти элемент управления, он, похоже, не работает.FindControl Не работает, если его вызывают из другого класса

Вот код в EVENT класса

Public Class Events 
Inherits System.Web.UI.Page 

    Public Sub Dynamic_Btn_Click(ByVal sender As Object, ByVal e As EventArgs) 
     Dim SQL As New SQLControl 

     Dim sTempPanel1 As UpdatePanel = FindControl("MyUpdatePanel1") 
     MsgBox("MyUpdatePanel1" & ":" & (sTempPanel1 Is Nothing)) 

    End Sub 
End Class 

ПРИМЕЧАНИЕ: Если же выше саб копировать/вставить в код позади класса страницы, это работает.

Я знаю, что здесь отсутствует какая-то ссылка. Может быть FindControl это не ссылка на страницу, в которой следует искать в

+2

'FindControl' в вашем коде - это метод экземпляра страницы« События ». Этот экземпляр не будет содержать элементы управления, которые были добавлены на другую страницу. – Igor

+0

Спасибо за быстрый ответ, Игорь, я буду рыть ковш на этом и обновить эту тему. Я понимаю. –

ответ

0

Это понятно, почему он не работает. - вы работаете FindControl, которые принадлежат к вашему Events классу. Но кнопки не включены в класс Event. Почему вы выбрали такую ​​архитектуру - это другой вопрос.

Что вы можете сделать, чтобы получить панель, на которой ваша кнопка сидит, чтобы позвонить

Dim b as Button = DirectCast(sender, Button) 
Dim p as UpdatePanel = = DirectCast(b.Parent, UpdatePanel) 

запомнить Также это: метод [FindControl] поиск только немедленный, или верхний уровень на страницах, контейнер; он не рекурсивно ищет элементы управления в контейнерах имен, содержащихся на странице.

Но если вы действительно не знаете точное местоположение управления, вы можете написать рекурсивную функцию, чтобы найти его

Если вы знаете, что у вас есть

-- Page 
    -- UpdatePanel 
     -- Panel 
     -- Button 

Вы можете жёстко

button.Parent.Parent ' <-- this is your update panel 
+0

Спасибо T.S Я проверю это и обновлю поток. –

+0

Я добавил процедуры к одному и тому же коду за страницей, то есть к тому же классу, где я динамически генерирую кнопки. Однако это говорит о том, что он просто заставляет его работать. Сама причина, по которой я хотел создать события щелчка из другого класса, заключалась в том, чтобы просто сохранить код за главной страницей/классом, иначе он выглядел слишком загроможденным кодами. Я просто новая пчела и учась, когда я кодирую. Есть ли лучший способ проектирования всей архитектуры в противном случае? –

+0

На самом деле я хотел бы рассказать вам, чего я пытаюсь достичь, и кто-то может помочь мне с предложением о том, как должна выглядеть архитектура. В настоящее время я смотрю на то, что я разработал, - это слишком много кода, я думаю ... :( –