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

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

Может ли кто-нибудь посмотреть на мой код и сказать мне, где я ошибся?

    Partial Class PayerContacts
    Inherits System.Web.UI.Page

    Dim connStrDRContacts As String = ConfigurationManager.ConnectionStrings("DRContacts_SQL").ConnectionString

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        navBuild()
    End Sub

    Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init

        If IsPostBack Then
            LoadContacts(ViewState("objSender"))
        End If

    End Sub

    Private Function navBuild() As Integer

        Dim SQLstrDRs As String = "SELECT * FROM DRList"
        Dim DbConnDRs As SqlConnection = New SqlConnection(connStrDRContacts)
        DbConnDRs.Open()
        Dim dtDRsTemp As New DataTable
        Dim SQLAdapterDRs As New SqlDataAdapter(SQLstrDRs, DbConnDRs)
        SQLAdapterDRs.Fill(dtDRsTemp)

        'Loop through each row of the DataView to create HTML table data

        Dim NewTableRow As New TableRow

        For Each row As DataRow In dtDRsTemp.Rows

    'CREATE table with button to display contacts related to client (one to many)   
            Dim NewTableButton As LinkButton = New LinkButton
            NewTableButton.ID = "btnDRName" & NewTableText
            NewTableButton.ViewStateMode = UI.ViewStateMode.Enabled
            AddHandler NewTableButton.Click, AddressOf LoadContacts

        Next

        Return 0

    End Function

    Protected Sub LoadContacts(sender As Object, e As EventArgs)

        Dim LoopCount As Integer = 0

        Dim SQLstrLoadTable As String = "SELECT * FROM ContactList WHERE DRVendor = '" & sender.Text.ToString & "'"
    and so on....
        SQLAdapterLoadTable.Fill(dtLoadTableTemp)

        Dim NewTableRow As New TableRow

        For Each row As DataRow In dtLoadTableTemp.Rows

            'CREATE Accordion to display data
            NewAccordion.ID = "ContactAccordion" & LoopCount
            NewAccordion.Visible = True
    blah, blah...

            'SET Pane
            NewAccordionPane.HeaderContainer.ID = "PaneHeader" & LoopCount
            NewAccordionPane.ContentContainer.ID = "PaneContent" & LoopCount

    'CREATE button to open ModalPopup to EDIT each record
            Dim imgGear As New ImageButton
            imgGear.ID = "btnGear" & row!ID.ToString
            imgGear.ViewStateMode = UI.ViewStateMode.Enabled
            AddHandler imgGear.Click, AddressOf EditRecord

            'LOAD Pane
            NewAccordionPane.HeaderContainer.Controls.Add(NewHeaderTable)
            NewAccordionPane.ContentContainer.Controls.Add(New LiteralControl(NewTableText))


        ViewState("objSender") = sender

    End Sub

    Protected Sub EditRecord(ByVal sender As Object, ByVal e As EventArgs)
        'Open ModalPopup to edit record
        popup.Show()
        pnlAddEdit.Visible = True

    End Sub

End Class

person mreinsmith    schedule 29.04.2015    source источник
comment
Что ты пытаешься сделать? Что сломано? Вы пробовали отлаживать? Кроме того, сократите код до минимума, необходимого для воспроизведения проблемы. (Иногда этого процесса достаточно, чтобы разобраться в проблеме самостоятельно!)   -  person Barett    schedule 29.04.2015
comment
Хорошо, я сузил его. Что я пытаюсь сделать, так это открыть страницу с NAVbar и перечислить всех клиентов, вы нажимаете на имя этого клиента, и для каждого контакта появляются сворачиваемые карточки контактов. Затем в заголовке каждой карточки контакта (аккордеон) есть значок шестеренки, который вы нажимаете, чтобы редактировать этот отдельный контакт (модальное всплывающее окно для редактирования).   -  person mreinsmith    schedule 29.04.2015
comment
Навигационная панель списка клиентов работает и отображает контакты, связанные с клиентом. Но я не могу заставить значок шестеренки открыть модальное всплывающее окно. Передача обработчика через обратную передачу, похоже, не работает   -  person mreinsmith    schedule 29.04.2015
comment
Кстати, это хороший момент, сузить его до основной функции, я буду продолжать смотреть на это. Спасибо   -  person mreinsmith    schedule 29.04.2015


Ответы (1)


Статьи Infinities Loop о ViewState и Dynamic Controls действительно должны быть прочитаны каждым разработчиком Webforms:

http://mocha.mojoskins.com/SharedFiles/Download.aspx?pageid=566&mid=786&fileid=38

http://weblogs.asp.net/infinitiesloop/TRULY-Understanding-Dynamic-Controls-_2800_Part-1_2900_

Примеры написаны на C#, но вы должны понять, что происходит, в конце концов, это одна и та же библиотека базовых классов.

person sh1rts    schedule 29.04.2015
comment
Спасибо, я проверю - person mreinsmith; 29.04.2015
comment
Состояние просмотра находится здесь - weblogs.asp.net/infinitiesloop/Truly-Understanding-Viewstate - но, похоже, отсутствуют изображения. Тем не менее, все еще читаемо, и это очень хорошее (и точное) объяснение того, как работает ViewState и как вы должны его использовать. - person sh1rts; 29.04.2015