Пользовательское событие в пользовательском контроле - PullRequest
2 голосов
/ 10 мая 2011

У меня есть страница (aspx), которая содержит пользовательский контроль (ascx).При обратной передаче aspx я хотел бы прочитать некоторые контрольные значения в ascx.Поэтому, прочитав хороших статей , я создал событие в моем aspx, которое запускается при обратной передаче.Обработчик событий находится в ascx и просто записывает значения, которые меня интересуют, в представление состояния, чтобы родительская страница могла их прочитать.Проблема в том, что мой обработчик событий никогда не срабатывает, хотя я вижу, что событие возникает, когда я прохожу код.Так что мой код бомбит при попытке прочитать состояние представления (которое пусто)

Вот что у меня в aspx:

Partial Public Class Visitor
    Inherits System.Web.UI.Page
    Public Event PagePostback(ByVal sender As Object, ByVal e As System.EventArgs)
.
.
.
    Private Sub SaveAssignment(ByVal e As EventArgs)
        RaiseEvent PagePostback(Me, e) 'Tell usercontrol to post its control values to the viewstate
    'read viewstate and save its values
    End Sub

Вот что у меня в ascx:

Partial Public Class GenVstr
    Inherits System.Web.UI.UserControl
    Protected WithEvents pageVisitor As Visitor
    Public Property visitType() As String
        Get
        Return ViewState("visitType").ToString
        End Get
    Set(ByVal value As String)
        ViewState("visitType") = value
    End Set
    End Property
    Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles pageVisitor.PagePostback
        With Me
        If optVIP.Checked Then .visitType = "VIP"
        If optFamily.Checked Then .visitType = "Family"
        If optMedia.Checked Then .visitType = "Media"
        If optGuest.Checked Then .visitType = "Guest"
        If optConference.Checked Then .visitType = "Conference"
        End With
    End Sub

О, я случайно не упомянул, что я динамически загружаю ascx?:)

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Я думаю, что нашел проблему. Это было в этой строке:

Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles pageVisitor.PagePostback

В моем разделе «Ручки» «pageVisitor» - это имя переменной, которую я объявил WithEvents. Вместо того, чтобы обрабатывать это, я должен был обработать имя моего события PagePostback моего usercontrol (его ID).

Так должно выглядеть так:

Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles [myusercontrol's ID].PagePostback
0 голосов
/ 10 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...