Каскадный раскрывающийся список AJAX не заполняется

Я следую этому уроку, чтобы попытаться реализовать каскадные выпадающие списки с использованием инструментария AJAX в VS2012, однако вместо этого я использую MySQL в качестве базы данных. Я создал веб-сервис (как описано в руководстве - см. Ниже),

<WebMethod()>
Public Function GetComplex(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
    Dim conn As New MySqlConnection("Server=localhost; database=lockout; User ID=root; Pwd=123let?")
    conn.Open()
    Dim comm As New MySqlCommand("SELECT complex_id, complex_name FROM complex ORDER BY complex_name", conn)
    Dim dr As MySqlDataReader = comm.ExecuteReader()
    Dim l As New List(Of CascadingDropDownNameValue)
    While (dr.Read())
        l.Add(New CascadingDropDownNameValue(dr("complex_name").ToString(), dr("complex_id").ToString()))
    End While
    conn.Close()
    Return l.ToArray()
End Function

и я могу подключиться к своей базе данных и вызвать мою функцию. Вызов функции возвращает следующее в моем веб-браузере:

<ArrayOfCascadingDropDownNameValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
 <CascadingDropDownNameValue>
  <name>14 Line</name>
  <value>1</value>
  <isDefaultValue>false</isDefaultValue>
 </CascadingDropDownNameValue>
 <CascadingDropDownNameValue>
  <name>16 Line</name>
  <value>2</value>
  <isDefaultValue>false</isDefaultValue>
 </CascadingDropDownNameValue>
 <CascadingDropDownNameValue>
  <name>Converting</name>
  <value>3</value>
  <isDefaultValue>false</isDefaultValue>
 </CascadingDropDownNameValue>
 <CascadingDropDownNameValue>
  <name>F&E</name>
  <value>4</value>
  <isDefaultValue>false</isDefaultValue>
 </CascadingDropDownNameValue>
 <CascadingDropDownNameValue>
  <name>Water Quality</name>
  <value>5</value>
  <isDefaultValue>false</isDefaultValue>
 </CascadingDropDownNameValue>
</ArrayOfCascadingDropDownNameValue> 

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

<%@ Page Title="LockoutNew" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="LockoutNew.aspx.vb" Inherits="Lockout.LockoutNew" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">

<div>
    Complex: <asp:DropDownList ID="ComplexList" runat="server" /><br />
   <!-- Machine: <asp:DropDownList ID="MachineList" runat="server" /><br /> -->
</div>

<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server" 
    ServicePath="lockoutService.asmx" ServiceMethod="GetComplex" 
    TargetControlID="ComplexList" Category="Complex" 
    PromptText="Select Complex" />

<!-- <ajaxToolkit:CascadingDropDown ID="ccd2" runat="server" 
    ServicePath="lockoutService.asmx.vb" ServiceMethod="GetMachine" 
    TargetControlID="MachineList" ParentControlID="ComplexList" 
    Category="Machine" 
    PromptText="Select Machine" /> -->

</asp:Content>

Любая помощь очень ценится...

1 ответ

У меня была точно такая же проблема. Дело в том, что при построении каскадной логики нужно знать, что первый элемент отличается от остальных. Первый в цепочке элемент не имеет параметров для передачи в метод! Таким образом, ваш метод для первого выпадающего списка не должен содержать параметров:

Public Function GetComplex() As CascadingDropDownNameValue()
    Dim conn As New MySqlConnection("Server=localhost; database=lockout; User ID=root; Pwd=123let?")
    conn.Open()
    Dim comm As New MySqlCommand("SELECT complex_id, complex_name FROM complex ORDER BY complex_name", conn)
    Dim dr As MySqlDataReader = comm.ExecuteReader()
    Dim l As New List(Of CascadingDropDownNameValue)

    While (dr.Read())
        l.Add(New CascadingDropDownNameValue(dr("complex_name").ToString(), dr("complex_id").ToString()))
    End While

    conn.Close()
    Return l.ToArray()
End Function
Другие вопросы по тегам