ASP.NET Visual Basic Code Behind.. Попытка заполнить раскрывающийся список, который находится в formview

Я ищу небольшую помощь с моим проектом здесь. В моем коде у меня есть два выпадающих списка. Первый список заполняется при загрузке страницы результатами, поступающими из запроса LDAP. Таким образом, раскрывающийся список работает хорошо и предоставляет пользователю список активных пользователей в AD.

Теперь вот моя головная боль... У меня есть элемент управления formview в моем проекте. Я разместил дополнительный выпадающий список в шаблоне edititem. Что я хочу сделать, так это скопировать содержимое первого раскрывающегося списка во второй. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь написать код для второго, я продолжаю получать сообщение об ошибке, что второй элемент управления еще не был объявлен, что на самом деле имеет смысл для меня, потому что форма на самом деле не существует на страницу, пока кто-нибудь не выберет индекс в элементе управления gridview, к которому привязано представление формы.

Я думаю, что для этого мне нужно использовать оператор .findcontrol в событии edititem formview. Однако, когда я пробовал это, я все еще получал ошибки о том, что идентификатор элемента управления не объявлен. Я буду вставлять то, что я пробовал до сих пор здесь ..

'' Здесь я заполняю этот первый выпадающий список в коде позади

    Dim dirEntry As DirectoryEntry = New DirectoryEntry("LDAP:MyIPaddress", "MyDomain/Username", "MyPassword", AuthenticationTypes.FastBind)

        Dim searcher As DirectorySearcher = New DirectorySearcher(dirEntry)

        '' Filter the search so that it only pulls up Active user accounts. The search filter "!userAccountControl:1.2.840.113556.1.4.803:=2" removes
        '' disabled users from the list. For a list of all attributes defined by Active Directory, see https://msdn.microsoft.com/en-us/library/ms675090(v=vs.85).aspx
        searcher.Filter = "(&(objectClass=User)(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))"

        '' Loop through the search results and add each user as string types to list controls 
        Dim userNames As New List(Of String)

        For Each resEnt As SearchResult In searcher.FindAll()
            Dim userName As String = resEnt.Properties("name")(0).ToString()

            userNames.Add(userName)

        Next


        userNames.Sort()
        For Each userName In userNames
            userList.Items.Add(userName)

        Next

'' Вот что у меня пока есть в моих попытках найти второй элемент управления...

    Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
    If FormView1.CurrentMode = FormViewMode.Edit Then
        DropDownList(userListEdit = FormView1.FindControl("userListEdit"))

    End If
End Sub

'' Как только я пытаюсь написать последнюю строку, чтобы найти элемент управления, я получаю сообщение об ошибке, говорящее, что элемент управления не объявлен. Я пытался найти решение на многих различных форумах в Интернете. Но, похоже, ничто не дает мне именно то, что мне нужно. Кто-нибудь знает, как я могу найти этот элемент управления и скопировать содержимое кода? Заранее спасибо!


person David Blanchard    schedule 21.07.2016    source источник


Ответы (2)


Судя по тому, как это выглядит, ответ может быть простым. Ваш код:

DropDownList(userListEdit = FormView1.FindControl("userListEdit"))

Что вам нужно сделать, это:

Dim ddlList As DropDownList = FormView1.FindControl("userListEdit")

Или вы можете использовать DirectCast() и получить прямой доступ:

DirectCast(FormView1.FindControl("userListEdit"), DropDownList) //.anyMethod()
person peyote boy    schedule 21.07.2016

@peyote boy Большое спасибо за ваш ответ. Это показало мне правильный синтаксис. Отсюда мне пришлось кое-что узнать о состояниях сеанса, чтобы получить желаемый результат.

в моем событии загрузки страницы я добавил эту строку кода

    Session("userNames") = userNames 

Это сохраняет список в текущем состоянии сеанса, поэтому я могу использовать его позже. Затем я воспользовался вашим предложением, чтобы, наконец, получить результат, который я искал.

    Protected Sub DetailsView1_Databound(sender As Object, e As System.EventArgs) Handles DetailsView1.DataBound
If DetailsView1.CurrentMode = DetailsViewMode.Edit Then 
    Dim ddlList As New DropDownList
    ddlList = DetailsView1.FindControl("userEditList") 
        For Each userName In Session("userNames") 
            ddlList.Items.Add(userName)
       Next
      End If 
      End Sub 

Еще раз спасибо за помощь! :)

person David Blanchard    schedule 24.07.2016